bash 是否支持语句中的变量替换return
?
从man bash
:
return [n]
Causes a function to stop executing and return the value specified by n to its caller.
是否n
允许变量替换?
我根据以下示例进行了测试:
$ cat t345.sh
f()
{
local x=13
return $x
}
f
echo $?
$ bash t345.sh
13
$ bash --version
GNU bash, version 5.2.21(1)-release (x86_64-pc-cygwin)
这里我们看到 Bash 没有抱怨return $x
并f
返回 13。
它一直都是这样吗?或者从哪个版本的 Bash 开始支持这一点?
一直都是这样,因为变量替换不是基于每个语句进行的。
不是
return
会扩展变量,就像不是echo
会扩展一样——所有此类扩展都是在命令执行前的echo $?
输入解析步骤之一中完成的;这意味着它们同样适用于大多数命令(只有少数例外)。到执行时,命令将已经变成(或),并且各个语句不需要了解有关变量的任何信息。return 13
echo 13
(事实上,它甚至没有区分命令的不同部分——你甚至可以使用
local y=return; $y $x
,这也会产生与 相同的效果return 13
,希望能让大家明白这一点。)