範例:
#!/bin/sh
showParams()
{
echo \$# = $#
while [ "$1" ]
do
echo $1
shift
done
}
var1="1 2 3"
var2="a b c"
var3="d/e/f"
showParams "$var1" $var2 $var3
結果:
$# = 5
1 2 3
a b c
d
e
f
說明:
1. 將 IFS 設定為 '/'
2. "$var1" 因為被 double quote,所以 1 2 3 被當做一整個參數。
3. $var2 的內容值是 a b c,因為沒有包含 IFS 的 '/',所以也被當做一整個參數。
4. $var3 的內容值是 d/e/f,包含 IFS 的 '/',所以被 word splitting 成三個參數。
變數 IFS(Internal Field Separator)的預設值是 space, tab, newline,直接印也看不出所以然,但是可以透過 od 的幫助來顯示其內容值。
範例:
#!/bin/sh
echo -n "$IFS" | od -a -t x1 -c
結果:
0000000 sp ht nl
20 09 0a
\t \n
0000003
說明:
1. -n 是為了讓 echo 不要丟出 newline。
2. "$IFS" 加上 double quote 才能讓 echo 得到 $IFS 的內容值。
如果修改過變數 IFS(Internal Field Separator)的值後,想將其設定回預設值,可以使用以下方式。
範例:
#!/bin/sh
IFS=$' \t\n'
echo -n "$IFS" | od -a -t x1 -c
結果:
0000000 sp ht nl
20 09 0a
\t \n
0000003
沒有留言:
張貼留言