Bash脚本常见问题及解决方法
1. 管道创建子shell问题
在编写Bash脚本时,有时会遇到变量值异常的情况,例如$COUNT始终为零。这是因为管道会创建子shell,而while循环在子shell中运行,其内部对变量的更改不会影响脚本外部的变量。
解决方案
- 避免使用管道:可以使用I/O重定向代替管道,让输入来自重定向的输入,而不是设置管道。示例代码如下:
COUNT=0 while read PREFIX GUTS do # ... if [[ $PREFIX == "abc" ]] then let COUNT++ fi # ... done < $1 # <<<< This is the key line echo "$COUNT now lives in the main script"- 将额外工作放在子shell中:如果上述方法不适用,可以将额外的工作放在包含
while循环的子shell中。示例代码如下:
COUNT=0 cat $1 | ( while read PREFIX GUTS do # ...