Shell脚本中如何使用+=运算符?遇两类问题求助
Shell脚本问题解决方案
问题分析
- 无法使用
+=运算符:若脚本以sh(POSIX标准shell)运行,+=字符串追加语法是bash的扩展特性,POSIX shell不支持。 *被解析为目录文件:未加引号的变量在echo时会触发路径名扩展,*会被替换为当前目录下的所有文件名称。
修复后的脚本
Bash兼容版本
#!/bin/bash myVal="" for ((i=1 ;i<=5 ;i++)) do myVal+=" * " echo "$myVal" done
POSIX标准Shell兼容版本(无需Bash)
myVal="" i=1 while [ $i -le 5 ] do myVal="$myVal * " echo "$myVal" i=$((i+1)) done
关键修复点说明
+=运算符支持:- 在Bash环境下,
+=可直接用于字符串追加,脚本开头添加#!/bin/bash指定用Bash解释器即可启用该特性。 - 若需兼容所有POSIX标准Shell,改用
myVal="$myVal * "的方式拼接字符串。
- 在Bash环境下,
- 避免
*的路径扩展:- 必须用双引号包裹变量(
echo "$myVal"),阻止Shell对*进行路径名扩展,保留其字面符号意义。
- 必须用双引号包裹变量(
预期输出
* * * * * * * * * * * * * * *
内容的提问来源于stack exchange,提问作者Sachin Shah
相关产品推荐
相关产品推荐

