1. 管道輸出到read命令中, 使用管道echo輸出來設置變量將會失敗. 然而, 使用管道cat輸出看起來可以正常運行. cat file1 file2 | while read linehtml
2 .while被放置在子shell中。linux
#!/bin/sh # readpipe.sh # Bjon Eriksson . 5 last="(null)" cat $0 | while read line do echo "{$line}" last=$line done printf "\nAll done, last:$last\n" 14 exit 0 # 代碼結束. # 下邊是腳本的(部分)輸出. # 'echo'出了多餘的大括號. 18 ############################################# 20 ./readpipe.sh 22 {#!/bin/sh} {last="(null)"} {cat $0 |} {while read line} {do} {echo "{$line}"} {last=$line} {done} {printf "nAll done, last:$lastn"} 32 All done, last:(null) 35 變量(last)被設置在子shell中, 並無被設置在外邊. 在許多Linux發行版上, gendiff腳本一般都在/usr/bin下, 將find的輸出通 過管道傳到while read結構中. find $1 \( -name "*$2" -o -name ".*$2" \) -print | while read f; do . . .
3. 例外,在pipe中的一個大括號中的代碼段可能運行在一個 子shell中 。shell
ls | { read firstline; read secondline; } echo "First line is $firstline; second line is $secondline" # 不能工做
4. 引用還能夠改掉echo's不換行的"毛病".bash
bash$ echo $(ls -l) total 8 -rw-rw-r-- 1 bozo bozo 130 Aug 21 12:57 t222.sh -rw-rw-r-- 1 bozo bozo 78 Aug 21 12:57 t71.sh bash$ echo "$(ls -l)" total 8 -rw-rw-r-- 1 bozo bozo 130 Aug 21 12:57 t222.sh -rw-rw-r-- 1 bozo bozo 78 Aug 21 12:57 t71.sh