深入探索Shell脚本:执行、引用与可移植性
1. 脚本执行与子shell问题
在编写Shell脚本时,我们常常会遇到一些看似简单却容易出错的问题。例如下面这个脚本:
if false; then
( if then )
else
echo hello
fi
直观上看,子shell命令 ( if then ) 是无效的,但由于 if 条件为 false ,它不会被执行。然而,大多数Shell会因为语法错误拒绝执行这个脚本。还有一个更隐蔽的变体:
if false; then
( if then fi )
else
echo hello
fi
这个版本在 ash 和 zsh 中可以通过,但会被 ksh93 、 pdksh 和 bash 拒绝。将子shell替换为命令替换可以让更多Shell接受这样的代码,但如果省略 fi , ash 仍然会拒绝。
建议 :确保传递给子shell的代码在语法上是有效的。
2. 命令替换、子shell和参数替换
当命令在子shell中执行时,它们不会在父
超级会员免费看
订阅专栏 解锁全文
35

被折叠的 条评论
为什么被折叠?



