考虑以下示例:
IFS=:
x="a :b" # three spaces
echo ["$x"] # no word splitting
# [a :b] # as is
echo [$x] # word splitting
# [a b] # four spaces
Run Code Online (Sandbox Code Playgroud)
分词识别单词"a "
(三个空格)和"b"
,用冒号分隔,然后echo
用中间的空格连接单词。
但是,当使用 的值$x
作为函数参数时,我发现很难解释结果。
args(){ echo ["$*"];}
args a :b # three spaces
# [a::b]
Run Code Online (Sandbox Code Playgroud)
和:
args(){ echo [$*];}
args a :b # three spaces
# [a b] # two spaces
Run Code Online (Sandbox Code Playgroud)
$*
扩展为所有位置参数组合的值。此外,"$*"
相当于"$1c$2"
,其中c
是 IFS 变量值的第一个字符。
args(){ …
Run Code Online (Sandbox Code Playgroud) parameter variable-substitution arguments variable bash-expansion