簡體   English   中英

在bash腳本循環中打印cat語句的輸出

[英]Print output of cat statement in bash script loop

我正在嘗試為來自cat命令的每一行執行命令。 我的基礎是我從供應商處獲得的示例代碼。

這是腳本:

for tbl in 'cat /tmp/tables'
do
   echo $tbl
done

所以我期待輸出是文件中的每一行。 相反,我得到了這個:

cat
/tmp/tables

這顯然不是我想要的。

我將用一個與數據庫連接的實際命令替換echo。

任何幫助糾正這一點將不勝感激。

您使用的是錯誤的報價類型。

您需要使用后引號而不是單引號來使參數成為程序運行並將內容輸出到forloop。

for tbl in `cat /tmp/tables` 
do 
    echo "$tbl"
done

另外為了更好的可讀性(如果你使用bash),你可以把它寫成

for tbl in $(cat /tmp/tables) 
do 
    echo "$tbl"
done

如果你的期望是獲得每一行(上面的for循環會給你每個單詞),那么你可能最好使用xargs ,就像這樣

cat /tmp/tables | xargs -L1 echo

或作為循環

cat /tmp/tables | while read line; do echo "$line"; done

使用while循環:

while read line
do
echo "$line"
done < "file"

單引號應該是反引號:

for tbl in `cat /etc/tables`

雖然,這不會讓你按行輸出/輸入,而是按字。 要逐行處理,您應該嘗試以下方法:

cat /etc/tables | while read line
    echo $line
done
while IFS= read -r tbl; do echo "$tbl" ; done < /etc/tables

這個

例如,您可以通過重新定義IFS(輸入字段分隔符)在bash中進行大量解析

IFS="\t\n"  # You must use double quotes for escape sequences. 
for tbl in `cat /tmp/tables` 
do 
    echo "$tbl"
done

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM