在我写的测试函数如何返回值的shell脚本中,我遇到了奇怪的意外行为。下面的代码假定当输入函数fnttmpfile时,第一个echo语句将打印到控制台,然后第二个echo语句实际上将字符串返回到调用main。那是我的设想,但我错了!Shell脚本返回值不正确,为什么?
#!/bin/sh
fntmpfile() {
TMPFILE=/tmp/$1.$$
echo "This is my temp file dude!"
echo "$TMPFILE"
}
mainname=main
retval=$(fntmpfile "$mainname")
echo "main retval=$retval"
实际发生的情况恰恰相反。第一个回声传递给调用函数,第二个回声传递到STDOUT。为什么是这样,有没有更好的办法......
main retval =这是我的临时文件伙计! /tmp/main.19121
的全部原因为这个测试是因为我写一个shell脚本做一些数据库备份和决定使用小功能做具体的事情,你知道让它干净,而不是意大利面代码。一个我用的功能是这样的:
log_to_console() {
# arg1 = calling function name
# arg2 = message to log
printf "$1 - $2\n"
}
这一整个问题是,这是返回一个字符串值的功能是越来越log_to_console输出,而不是取决于事物的数量级上。我想这是我没有意识到的有关shell脚本的一些棘手问题。
你真正的问题是什么? – 2013-02-12 16:34:26
可能的重复http://stackoverflow.com/questions/14482943/can-i-return-a-string-from-a-bash-function-without-echo-or-global-variables。 – 2013-02-12 16:38:01
Shell函数返回0-255之间的值,它们不能返回字符串。 – cdarke 2013-02-12 18:55:11