Shell
序列命令和測試題
這是我遇到的一個測試問題:
以下命令序列將產生哪個輸出?
echo '1 2 3 4 5 6' | while read a b c; do echo result: $c $b $a; done
而正確的答案是:
3 4 5 6 2 1
我不知道為什麼。有人可以向我解釋一下嗎?
(起初我以為答案是
3 2 1
。)
從閱讀手冊頁:
從標準輸入讀取單行,如果提供了 -u 選項,則從文件描述符 FD 讀取。與分詞一樣,該行被分成多個欄位,第一個單詞分配給第一個 NAME,第二個單詞分配給第二個 NAME,依此類推,任何剩餘的單詞都分配給最後一個 NAME。只有 $IFS 中的字元被辨識為單詞分隔符。
出於這個原因,我通常使用“垃圾”變數來收集任何可能剩餘的東西:
echo '1 2 3 4 5 6' | while read a b c TRASH; do echo "result is: $c $b $a" echo "trash is: $TRASH" done
正在使用:
$ echo '1 2 3 4 5 6' | while read a b c TRASH; do > echo "result is: $c $b $a" > echo "trash is: $TRASH" > done result is: 3 2 1 trash is: 4 5 6