首页 > 解决方案 > 如果命令替换命令在 shell 脚本中失败,变量是否会被赋值为空?

问题描述

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 抱怨该文件不存在。我想知道为什么这个投诉消息没有分配给变量而不是被打印出来?是因为标准输出和标准错误吗?

标签: bashshellsh

解决方案


不,这不是因为命令失败a是空的。

该命令没有产生任何输出数据,因此在a.

修改函数为:

f(){ echo Hello; return 1; }

现在运行命令替换。你会发现a包含Hello. 如果您$?在分配后立即检查,它包含1从函数返回的状态。退出状态和命令输出是分开的。

该文档位于Command Substitution的 GNU Bash 手册中。


推荐阅读