如題,將某命令的輸出結果賦值給乙個變數 a
如果使用 echo $a 輸出變數,則變數中的 換行都會被忽略掉,所有內容輸出到一行
而使用 echo "$a" 可正常輸出變數中的換行
當我們要將命令的輸出儲存到乙個變數,再對每一行遍歷進行某些操作時不能使用
[html]view plain
copy
for item in "$a";do
## do something
done
語法,這樣取到的變數 item 不是$a 中的一行,而是以空格分隔的乙個個字串
這種情況可以使用以下語法解決
[html]view plain
copy
echo "$a" | while read i
do
done
測試**:
[html]view plain
copy
#!/bin/bash
a=ls -l
echo '***********************************= echo $a'
echo $a
echo "$a" | while read i
do
echo $i
# break
done
while迴圈位於管道中,這意味著在執行過程中,while迴圈實際是位於乙個新的shell中的,while迴圈中的變數和檔案開頭定義的變數是兩個不同的變數,所以while迴圈中所改變的值在while迴圈結束後無法儲存下來。解決這個問題的方法就是不要使用管道。
對於檔案的解決方法:
解決方案: 用重定向而不是管道,舉例:
-(dearvoid@linuxeden:forum)-(~/tmp)- [31048 0]
; cat file
1 2 3 4 5
-(dearvoid@linuxeden:forum)-(~/tmp)- [31048 0]
; cat file.sh
#!/bin/bash arr=() i=0 while read line; do arr[i++]=$line done < file echo $
-(dearvoid@linuxeden:forum)-(~/tmp)- [31048 0]
; ./file.sh
5shell 中可以使用 while 按行讀取乙個檔案,同時也可以使用 while 按行讀取乙個變數的值,或者乙個命令的輸出。方法有以下4種,分別是程序替換,管道,here document 和here string(來自chinaunix:
#! /bin/bash
var=$(cat urfile)
echo "process substitution"
while read line
doecho "$line"
done < <(echo "$var")
echo "pipe"
echo "$var" | while read line
doecho "$line"
done
echo "here document"
while read line
doecho "$line"
done <
$var
!echo "here string"
while read line
doecho "$line"
done <<< "$var"
exit
shell 指令碼變數賦值
簡單的變數賦值a 879 echo the value of a is a.用let賦值let a 16 5 echo the value of a is now a.read命令是系統內建命令 語法格式 read 變數1 變數2 用 read 命令 這也是一種賦值 echo n enter a r...
Shell指令碼輸出顏色
輸出顏色可以美化介面 給人愉快的心情,哈 指令碼可以這樣寫 bin bash 先定義一些顏色 red e 0 31m 紅色 red e 1 31m green e 0 32m 綠色 green e 1 32m yellow e 0 33m 黃色 yellow e 1 33m blue e 0 34m...
Shell指令碼 cat EOF輸出多行
在某些場合,可能我們需要在指令碼中生成乙個臨時檔案,然後把該檔案作為最終檔案放入目錄中。可參考ntop.spec檔案 這樣有幾個好處,其中之一就是臨時檔案不是唯一的,可以通過變數賦值,也可根據不同的判斷生成不同的最終檔案等等。一 cat和eof cat命令是linux下的乙個文字輸出命令,通常是用於...