#!/bin/sh
set - $(IFS=" "; echo This is a book)
echo $1
echo $2
echo $3
echo $4得到的結果是 $1="This", $2="is", $3="a", $4="book",所以 set - $(IFS=" "; echo This is a book) 就是把後面的字串用空白字元 " " 當作區隔,把切割後的內容放到 $1, $2...。
以下的範例是利用 $IFS 來尋找執行檔存在哪個 $PATH 資料夾內,我習慣取名為 findpath
if [ 1 -eq $# ]; then RESULT="not found!" FILENAME=$1 set - $(IFS=":"; echo $PATH) i=1 eval "DIR=\$$i" until [ "" == "$DIR" ] do if [ -x "$DIR/$FILENAME" ]; then RESULT="$DIR/$FILENAME" DIR="" else i=$(($i+1)) eval "DIR=\$$i" fi done echo $RESULTelse echo "Syntax: $0 [filename]" echo " filename: The filenam you want to find in PATH"fi應用在 for 迴圈
findpath 的另一個寫法,先把原本的 IFS 存到 IFS_SAVE,然後指定冒號 ":" 為切割符號,這時候 for DIR in $PATH 就會把 $PATH 用冒號將每個單位切出來使用。if [ 1 -eq $# ]; then RESULT="not found!" IFS_SAVE="$IFS" IFS=":" for DIR in $PATH do if [ -x "$DIR/$1" ]; then RESULT="$DIR/$1" break fi done IFS="$IFS_SAVE" echo $RESULTelse echo "Syntax: $0 [filename]" echo " filename: The filenam you want to find in PATH"fi
IFS 的初始值
執行 set | grep IFS 可以看到目前的 IFS 設定值,在還沒變更之前就是初始值,一般是
IFS=$' \t\n'
沒有留言:
張貼留言