0
我測試下面的bash文件test.sh.但如何解釋輸出。有時我會記得引用字符串變量意味着保留單個變量中的空格,但是如何理解它而不是記住它。如何深入理解引用變量
list="one two three"
for a in $list
do
echo "$a"
done
for a in "$list"
do
echo "$a"
done
輸出:
一個
一二三
我測試下面的bash文件test.sh.但如何解釋輸出。有時我會記得引用字符串變量意味着保留單個變量中的空格,但是如何理解它而不是記住它。如何深入理解引用變量
list="one two three"
for a in $list
do
echo "$a"
done
for a in "$list"
do
echo "$a"
done
輸出:
一個
一二三
從字分裂的評論和解釋以及內部字段分隔符繼續,這裏是一個簡短的例子,應該有所幫助:
#!/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
在子外殼(例如,例如(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
雙引述防止**字分裂**。默認的**內部字段分隔符(IFS)**是'$'\ t \ n''('space','tab','newline')控制shell如何分割未加引號的字符串。 (這被稱爲**分詞**)。意思是一個沒有引號的字符串在shell中被'IFS'中的任何一個字符分割。雙引號可防止***分詞***。 –