天天看點

shell IFS

#!/bin/bash
# weirdvars.sh: Echoing weird variables.

var="'(]\\{}\$\""
echo $var        # '(]\{}$"
echo "$var"      # '(]\{}$"     和上面一句沒什麼不同.

echo

IFS='\'
echo $var        # '(] {}$"     \字元被空白符替換了,為什麼?
echo "$var"      # '(]\{}$"

# 以上例子由Stephane Chazelas提供..

exit 0
           

IFS 介紹

     Shell 腳本中有個變量叫 IFS(Internal Field Seprator) ,内部域分隔符。完整定義是The shell uses the value stored in IFS, which is the space, tab, and newline characters by default, to delimit words for the read and set commands, when parsing output from command substitution, and when performing variable substitution.

     Shell 的環境變量分為 set, env 兩種,其中 set 變量可以通過 export 工具導入到 env 變量中。其中,set 是顯示設定shell變量,僅在本 shell 中有效;env 是顯示設定使用者環境變量 ,僅在目前會話中有效。換句話說,set 變量裡包含了 env 變量,但 set 變量不一定都是 env 變量。這兩種變量不同之處在于變量的作用域不同。顯然,env 變量的作用域要大些,它可以在 subshell 中使用。

     而 IFS 是一種 set 變量,當 shell 處理"指令替換"和"參數替換"時,shell 根據 IFS 的值,預設是 space, tab, newline 來拆解讀入的變量,然後對特殊字元進行處理,最後重新組合指派給該變量。

補充:

避免cat指令 空格換行:

将IFS變成\n:

IFS=$'\n'