管道輸出到read中遇到的問題

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

 linux shell數據重定向(輸入重定向與輸出重定向)詳細分析code

linux shell 管道命令(pipe)使用及與shell重定向區別htm

相關文章
相關標籤/搜索