如何深入理解引用变量

时间:2016-08-23 01:09:47

标签: bash

我测试了以下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个
一二三三

1 个答案:

答案 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