我已将 设置IFS为x,即IFS=x。现在,如果我检查 的值IFS,如果我不使用双引号,它似乎是空的:
~ $ echo $IFS | cat -e
$
~ $ echo "$IFS" | cat -e
x$
~ $ echo $HOME
/home/mar
~ $ echo "$HOME"
/home/mar
~ $
Run Code Online (Sandbox Code Playgroud)
如上所示,$HOME行为并非如此。这种行为的原因是什么?
变量展开后,会发生分词并将其拆分为空词。拆分是使用IFS变量的每个字符作为分隔符完成的,并且由于$IFS仅扩展到其中的字符,因此IFS它被拆分为空词。
因此,例如:
IFS=xxx;
printf %q $IFS
''''''[root@localhost ~]#
Run Code Online (Sandbox Code Playgroud)
如果您使用双引号,则是在告诉 bash 将引号内的所有内容都视为一个词:
printf %q "$IFS"
xxx[root@localhost ~]#
Run Code Online (Sandbox Code Playgroud)
我想这与高级 Bash 脚本指南中的内容有关
使用双引号来防止分词。[2] 用双引号括起来的参数将自身呈现为单个单词,即使它包含空格分隔符也是如此。
结合例子(5.1):
var="'(]\\{}\$\""
echo $var # '(]\{}$"
echo "$var" # '(]\{}$" Doesn't make a difference.
IFS='\'
echo $var # '(] {}$" \ converted to space. Why?
echo "$var" # '(]\{}$"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2448 次 |
| 最近记录: |