如何在单个test命令中执行两条BASH Shell命令?代码报错求助
Bash命令执行问题分析与解决
报错原因
你用了$(echo "hello"; echo "hi")这种命令替换语法,shell的执行逻辑是:先运行括号里的命令,把输出结果当成新的系统命令去执行。这里括号内的echo命令输出了hello和hi两行内容,shell就会尝试执行hello这个命令,但你的系统里没有安装这个命令,所以触发了"Command 'hello' not found"的错误。
正确实现方式
要在||后面批量执行多条命令,不需要用命令替换,直接用以下两种方式即可:
方式1:用花括号包裹命令(推荐)
用{}把多条命令包裹成一个整体,确保只有当前面的test命令不成立时,所有包裹的命令才会执行:
test $? -eq 1 || { echo "hello"; echo "hi"; }
注意:{后面必须加空格,最后一条命令末尾要加;,这是bash的语法要求。
方式2:直接用分号分隔(仅适用于无需整体判断的场景)
如果只是简单执行两条命令,但要注意这种写法里第二条echo会不受前面条件影响,始终执行:
test $? -eq 1 || echo "hello"; echo "hi"
更简洁的写法
其实可以不用单独引用$?,直接把判断逻辑和执行命令结合:
# if语句写法 if ! test $? -eq 1; then echo "hello" echo "hi" fi # 短路逻辑写法 ! test $? -eq 1 && { echo "hello"; echo "hi"; }
内容的提问来源于stack exchange,提问作者Gary
相关产品推荐
相关产品推荐

