Ubuntu下sh与./执行Shell脚本时+=运算符报错原因及解决方案
问题原因
- Ubuntu 18.04 中默认的
sh实际指向的是Dash,这是一款严格遵循POSIX标准的轻量Shell,并没有实现Bash独有的+=字符串追加运算符 - 当你用
sh test.sh执行脚本时,Dash会把model+="Copy"整行识别为一个名为model+=Copy的可执行命令去查找,自然会抛出「not found」错误 - 用
./test.sh执行时,只要脚本头部声明了#!/bin/bash的Shebang,系统会自动调用Bash解释器执行,Bash对+=运算符做了扩展支持,所以运行正常
修复方案(必须使用
sh运行时) 替换+=写法为POSIX标准的字符串拼接语法即可,修改后的代码如下:
copy=true model="model" if [ ${copy} = true ] ; then model="${model}Copy" fi echo ${model}
改完后不管用sh test.sh还是./test.sh都能正常输出modelCopy,完全兼容所有POSIX标准的Shell环境。
内容的提问来源于stack exchange,提问作者kkgarg
相关产品推荐
相关产品推荐

