bash - 如果命令替换命令在 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 抱怨该文件不存在。我想知道为什么这个投诉消息没有分配给变量而不是被打印出来?是因为标准输出和标准错误吗?
解决方案
不,这不是因为命令失败a
是空的。
该命令没有产生任何输出数据,因此在a
.
修改函数为:
f(){ echo Hello; return 1; }
现在运行命令替换。你会发现a
包含Hello
. 如果您$?
在分配后立即检查,它包含1
从函数返回的状态。退出状态和命令输出是分开的。
该文档位于Command Substitution的 GNU Bash 手册中。
推荐阅读
- javascript - 记录 Javascript/React
- ansible - 比较整数值时的ansible
- apache-kafka - Kafka broker 支持多少个分区
- c# - 使用 SDK v4 与 Luis 服务的连接问题
- javascript - 如何从javascript中的字符串中获取最后一个数字
- reactjs - 如何在服务器(SSR)上持久化 redux 用户登录
- mediawiki - 更改 MediaWiki 的默认语言字符串
- javascript - 如何使用 Fetch API 从输入元素提交文件
- android - Android Studio 模拟器在 2018 年 11 月 13 日更新模拟器后不工作
- c# - C# JSON 返回对象