Bash脚本将命令输出赋值给变量时报No such file or directory错误
报错原因
该问题由Bash变量赋值的语法规则触发:
- Bash要求变量赋值时等号两侧不能有任何空格,你给出的代码中第二条赋值语句
latest_src_change= "$(...)的等号后存在多余空格,不符合语法要求。 - 当等号后存在空格时,Bash不会将该行识别为赋值操作:会把
latest_src_change=识别为给后续命令临时设置的环境变量,把$(...)的执行结果(也就是你场景中的2021/11/18)当作要运行的命令,系统找不到对应名称的可执行文件,因此抛出No such file or directory报错。 - 第一条赋值语句的等号两侧没有空格,符合语法规则,因此不会触发相同报错。
修复方法
删除第二条语句等号后的空格即可,修正后的代码如下:
latest_build_change="$(p4 changes -s submitted ${PERFORCE_BASE}/$branch_name/build/... -m 10 | head -1 | cut -d' ' -f4)" latest_src_change="$(p4 changes -s submitted ${PERFORCE_BASE}/$branch_name/src/... -m 10 | head -1 | cut -d' ' -f4)"
额外提示
不管是直接赋值字符串,还是用命令替换、算术替换的结果赋值,都需要严格遵守等号两侧无空格的规则,避免同类解析错误。
内容的提问来源于stack exchange,提问作者Merolla
相关产品推荐
相关产品推荐

