在zsh中
echo 'a string' > test.txt
echo $?
0
和
[[ $(echo 'a string') ]]
echo $?
0
然而
[[ $(echo 'a string' > test.txt) ]]
echo $?
1
另一个例子
curl -so 'curl-8.2.1.tar.gz' https://curl.se/download/curl-8.2.1.tar.gz
echo $?
0
或者
[[ $(curl -so 'curl-8.2.1.tar.gz' https://curl.se/download/curl-8.2.1.tar.gz) ]]
echo $?
1
我的问题:
- 这是因为输出重定向吗?如果不是,是什么原因造成的?
- 命令执行成功:
a string
出现在test.txt
并且curl将文件下载到我指定的输出文件中,为什么评估结果为false
? - 在脚本中是否有一种明智的方法来处理这个问题?假设我想执行某个命令,如果前一个命令执行成功(但
false
仍然返回),应该如何执行?我可以添加第二次检查来查看该行是否出现或文件是否已下载,但首先就不需要评估命令是否成功执行。
更多完整性示例(可读性与“正确性”?):
if ( $(echo 'a string' > text.txt) ); then echo yes; else echo no;fi
yes
if (( $(echo 'a string' > text.txt) )); then echo yes; else echo no;fi
no
if $(echo 'a string' > text.txt); then echo yes; else echo no;fi
yes
if echo 'a string' > text.txt; then echo yes; else echo no;fi
yes