在 POSIX shell 脚本中,是否可以将多个命令参数存储到变量中,然后在命令中扩展该变量?
例如,给定以下将参数传递给的代码find
,就可以将单词参数传递给命令:
rootname="$1"
case "$(uname)" in
Darwin)
mode='+111'
;;
Linux)
mode='/111'
;;
esac
if [ -n "$INCLUDE_SYMLINK" ]; then
find "${rootname}" -perm "${mode}" \( -type f -or -type l \)
else
find "${rootname}" -perm "${mode}" -type f
fi
但是,是否可以将多个单词参数(例如\( -type f -or -type l \)
单词集)放入变量并将其扩展回来以执行以下操作(这不起作用,因为引用将所有内容都放在 1 个单词内):
if [ -n "$INCLUDE_SYMLINK" ]; then
type_arg='\( -type f -or -type l \)'
else
type_arg='-type f'
fi
find "${rootname}" -perm "${mode}" ${type_arg}
反斜杠的作用是将括号从 shell 中转义(对于 shell 来说,括号会在子 shell 中启动所含的命令)
如果将该短语存储在变量中,请省略反斜杠。
此时,我想问一下您为什么选择 POSIX shell。您是否要部署到没有 bash 的平台?