为什么这个 IFS 变量赋值不影响它之前的 cmd?
Why does this IFS variable assignment not affect the cmd it precedes?
考虑这个 bash session:
set -- 1 2 3
echo "$*" # 1 2 3 (as expected)
IFS=a echo "$*" # 1 2 3 (why not "1a2a3"?)
IFS=a; echo "$*" # 1a2a3a (as expected)
为什么 "assignment before command" 语法无法在单个命令的持续时间内将 IFS
设置为不同的值?看来您必须首先使用单独的命令更改 IFS
的值。
因为IFS
影响命令的解析(分词、分词),所以必须在解析该命令之前设置。这就是为什么IFS=a echo "$*"
只能用原来的IFS
,不能用a
。
这有点类似于 FOO=bar echo $FOO
不回显 bar
的情况。 $FOO
被替换(空),然后执行命令及其变量赋值。
考虑这个 bash session:
set -- 1 2 3
echo "$*" # 1 2 3 (as expected)
IFS=a echo "$*" # 1 2 3 (why not "1a2a3"?)
IFS=a; echo "$*" # 1a2a3a (as expected)
为什么 "assignment before command" 语法无法在单个命令的持续时间内将 IFS
设置为不同的值?看来您必须首先使用单独的命令更改 IFS
的值。
因为IFS
影响命令的解析(分词、分词),所以必须在解析该命令之前设置。这就是为什么IFS=a echo "$*"
只能用原来的IFS
,不能用a
。
这有点类似于 FOO=bar echo $FOO
不回显 bar
的情况。 $FOO
被替换(空),然后执行命令及其变量赋值。