我正在尝试检查文件是否有 CR 换行并将结果 0 或 1 存储到变量中。
这是我在脚本中运行的命令。
isCR="$(file ${fileName} | grep -c 'with CR line terminators')"
脚本运行到上一行并且不运行该行但突然终止。
在 echo 语句中,它工作得很好。
echo "isCR=$(file ${fileName} | grep -c 'with CR line terminators')"
这会根据我使用的文件打印 isCR=0 或 isCR=1。
但是仅仅将值存储到变量 isCR 中是行不通的。我很困惑我在这里错过了什么。感谢您的帮助。
最佳答案
使用 set -e
(又名 set -o errexit
)告诉 shell 在任何命令返回非零退出状态时退出。
grep
在找不到匹配项时返回非零退出状态。
因此,当使用 bash -e
、set -e
、set -o errexit
时,ERR
触发退出或类似配置的陷阱,isCR="$(file ${fileName} | grep -c 'with CR line terminators')"
将终止您的脚本,因为非零退出状态来自grep
命令作为整个命令的退出状态传递。
相比之下,echo "$(false)"
不会,因为它的退出状态是echo
,而不是false
;当返回失败退出状态的命令也是 grep
时也是如此。
如果您想使用 set -e
但绕过它对这一特定行的行为,请考虑:
isCR="$(file ${fileName} | grep -c 'with CR line terminators')" || [[ $isCR ]]
|| [[ $isCR ]]
将使整个行具有真实的结果,即使 grep
返回 false,只要它发出非零字符数。
关于linux - 当值为 0 时存储 grep -c 输出时脚本终止,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54776376/