#!/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' 
 
沒有留言:
張貼留言