我测试了以下bash文件test.sh.但是如何解释输出。有时我会记得引用字符串变量意味着在单个变量中保留空格,但是如何理解它而不是记住它。
list="one two three"
for a in $list
do
echo "$a"
done
for a in "$list"
do
echo "$a"
done
输出:
一个
2个
3个
一二三三
答案 0 :(得分:1)
继续对分词和内部字段分隔符的评论和解释,这是一个应该有用的简短示例:
#!/bin/bash
list="one two three"
printf "\nDefault IFS (space, tab, newline):\n\n"
for a in $list
do
echo "$a"
done
for a in "$list"
do
echo "$a"
done
printf "\nIFS breaking only on newline:\n\n"
IFS=$'\n'
for a in $list
do
echo "$a"
done
for a in "$list"
do
echo "$a"
done
(如果您继续使用脚本并且在将IFS
设置为新值并且需要恢复当前(或默认值)IFS
后不退出,请保存当前(例如curifs="$IFS"
并在完成阻止时恢复,IFS="$curifs"
)或仅重置为默认值(例如IFS=$' \t\n'
)。您也可以使用新的IFS
运行阻止在子shell 中,例如(IFS=$',\n'; #do stuff)
或while
块,例如while IFS=$'\n' read -r line; do ...
)
示例使用/输出
$ bash ifs.sh
Default IFS (space, tab, newline):
one
two
three
one two three
IFS breaking only on newline:
one two three
one two three