将管道输出传递给测试命令
Passing pipe output to Test command
我对 test
命令语法感到困惑。我的目标是检查文件是否存在,但文件路径由 sed
命令形成。
所以,我尝试,例如:
echo '~/test111' | sed s/111/222/g | test -f && echo "found" || echo "not found"
但是那个命令总是 returns "found"。我做错了什么?
用当前的方法,你只是在说:
test -f && echo "yes" || echo "no"
因为 test -f
returns 默认为真,你总是得到“是”:
$ test -f
$ echo $?
0
正确的语法是test -f "string"
:
所以你想说:
string=$(echo '~/test111'|sed 's/111/222/g')
test -f "$string" && echo "found" || echo "not found"
可以压缩成:
test -f "$(echo '~/test111'|sed 's/111/222/g')" && echo "found" || echo "not found"
但它失去了可读性。
你也可以使用xargs
来执行之前管道给定的名称中的给定操作:
echo '~/test111'|sed 's/111/222/g' | xargs test -f && echo "found" || echo "not found"
我对 test
命令语法感到困惑。我的目标是检查文件是否存在,但文件路径由 sed
命令形成。
所以,我尝试,例如:
echo '~/test111' | sed s/111/222/g | test -f && echo "found" || echo "not found"
但是那个命令总是 returns "found"。我做错了什么?
用当前的方法,你只是在说:
test -f && echo "yes" || echo "no"
因为 test -f
returns 默认为真,你总是得到“是”:
$ test -f
$ echo $?
0
正确的语法是test -f "string"
:
所以你想说:
string=$(echo '~/test111'|sed 's/111/222/g')
test -f "$string" && echo "found" || echo "not found"
可以压缩成:
test -f "$(echo '~/test111'|sed 's/111/222/g')" && echo "found" || echo "not found"
但它失去了可读性。
你也可以使用xargs
来执行之前管道给定的名称中的给定操作:
echo '~/test111'|sed 's/111/222/g' | xargs test -f && echo "found" || echo "not found"