如果在shell 脚本中命令替换命令失败,变量会被分配为空吗?
Will variable be assigned to empty if the command for command substitution failed in shell scriping?
a=whatever
f(){return 1}
echo $a # this gives whatever
a=$(f)
echo $a # now a is empty
是否因为命令返回非零,所以命令替换失败,因此a
设置为空?这是定义明确的行为吗?到处都找不到。你能告诉我描述它的文档吗?
我试图从文件中 grep 一些东西并将结果分配给变量。所以我做了a=$(grep pattern file_not_exist)
。然后我看到 grep 抱怨文件不存在。我想知道为什么这个投诉消息没有分配给变量而不是被打印出来?是因为stdout和stderr吗?
不是,不是命令失败导致a
为空
该命令没有产生任何输出数据,因此 a
中没有要捕获的数据。
修改函数为:
f(){ echo Hello; return 1; }
现在运行命令替换。您会发现 a
包含 Hello
。如果在赋值后立即检查 $?
,它包含 1
,函数返回的状态。退出状态和命令输出是分开的。
文档在 Command Substitution 的 GNU Bash 手册中。
a=whatever
f(){return 1}
echo $a # this gives whatever
a=$(f)
echo $a # now a is empty
是否因为命令返回非零,所以命令替换失败,因此a
设置为空?这是定义明确的行为吗?到处都找不到。你能告诉我描述它的文档吗?
我试图从文件中 grep 一些东西并将结果分配给变量。所以我做了a=$(grep pattern file_not_exist)
。然后我看到 grep 抱怨文件不存在。我想知道为什么这个投诉消息没有分配给变量而不是被打印出来?是因为stdout和stderr吗?
不是,不是命令失败导致a
为空
该命令没有产生任何输出数据,因此 a
中没有要捕获的数据。
修改函数为:
f(){ echo Hello; return 1; }
现在运行命令替换。您会发现 a
包含 Hello
。如果在赋值后立即检查 $?
,它包含 1
,函数返回的状态。退出状态和命令输出是分开的。
文档在 Command Substitution 的 GNU Bash 手册中。