shell中的IFS和$*變數

來源:互聯網
上載者:User

本文轉載自http://blog.chinaunix.net/uid-22566367-id-381955.html

不得不說shell裡面的全域變數都是些噁心的傢伙,特別是這傢伙----IFS,噁心之極,差點被它忽悠過去了,所以趕快記錄下來,以免下次再被忽悠!!!

STRING1="111 222 333 444"

echo $STRING1

echo "$STRING1"

這組代碼沒什麼好說的,輸出的是:111 222 333 444,它的作用是和下面那段做對比!!

STRING2="111 222  333   444"

echo $STRING2

echo "$STRING2"

輸出的結果是

111 222 333 444

111 222  333   444

為什嗎?? 第一個輸出的結果明顯不對,難道輸出了的是STRING1的值,明顯不可能,這就是IFS的鬼伎倆。。。

首先介紹一下這個傢伙,IFS是shell內定的一個變數,預設定義的值為 <space> <tab> <newline>3個,不好意思,這3個值我打出來也看不見,只能寫英文。那IFS的作用是什麼了,它的作用就是把字串裡的某某字元(和 它一樣的字元,例如上面的<space> <tab> <newline>)轉義成分隔字元

例如"111 222  333   444",這個字串其實就是 111<space>222<space><space>333<space><space><space>444, 由於IFS裡也有個<space>,所以在它眼中<space>就是分隔字元,所以"111 222  333   444"在它看來就是這個鬼樣子111<分隔字元>222<分隔字元><分隔字元>333<分隔字元>< 分隔字元><分隔字元>444,由於分隔字元(不是所有的分隔字元都會合并,空格是個例外)進行合并,所以就成了111<分隔 符>222<分隔字元>333<分隔字元>444,而這該死的<分隔字元>偏偏顯示出來和一個空格是一樣的(或者說
空格被用來表示分隔字元),所以顯示出來就變成了"111 222 333 444"怎麼樣? 鬱悶吧

所以 echo $STRING2 顯示出來的是"111 222 333 444",echo "$STRING2"之所以還是保持原樣是因為""它屏蔽了IFS的功能,才未遭其迫害!!

如果我這樣改下,結果就一樣了,這時候shell就不會認為空白格是分隔字元了,倒是&符號要倒黴了 呵呵。。。

IFS='&'

STRING2="111 222  333   444"

echo $STRING2

echo "$STRING2"

另外還有個$*的全域變數,它和IFS狼狽為奸,盡幹壞事,今天也揭下老底!!

$*指的是指令碼入口參數的字串集,說也說不清楚,舉個例子

你在終端輸入一個指令碼,帶了3個參數,這樣

./script 111 222 333

那麼 echo $*輸出的就是111 222 333,這沒什麼問題,但是下面的東西就又忽悠人了

首先是這段代碼

IFS='&'

STRING2="111&222&&333&&&444"

echo $STRING2

echo "$STRING2"

這輸出的是

111  222  333   444

111&222&&333&&&444

經過上面的解釋,這個忽悠不到人-----因為IFS='&',所以字串裡的&全成了分隔字元,所以第一個輸出的是111 222 333 444,後面還有一組代碼

現在終端運行./script 111 222  333   444

IFS='&'

echo $*

echo "$*"

輸出的是

111 222 333 444

111&222&333&444

我來解釋一下是為什麼

因為$*等於111IFS222IFS333IFS444,亦等於111&222&333&444,由於echo $*時,&代表分隔字元,所以要轉換成空格 ,而第二行由於""的作用使得&沒有進行轉換

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.