我試圖對來自cat命令的每一行執行一個命令。我基於我從供應商處獲得的示例代碼。在bash腳本循環中輸出cat語句的輸出
這裏的腳本:
for tbl in 'cat /tmp/tables'
do
echo $tbl
done
所以我期待的輸出爲文件中的每一行。相反,我得到這個:
cat
/tmp/tables
這顯然不是我想要的。
我打算用與數據庫接口的實際命令替換回顯。
任何幫助矯直這將不勝感激。
我試圖對來自cat命令的每一行執行一個命令。我基於我從供應商處獲得的示例代碼。在bash腳本循環中輸出cat語句的輸出
這裏的腳本:
for tbl in 'cat /tmp/tables'
do
echo $tbl
done
所以我期待的輸出爲文件中的每一行。相反,我得到這個:
cat
/tmp/tables
這顯然不是我想要的。
我打算用與數據庫接口的實際命令替換回顯。
任何幫助矯直這將不勝感激。
您使用的是錯誤的引號類型。
您需要使用反引號而不是單引號使參數成爲程序運行並將內容導出到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
個
單引號應該是反引號:
for tbl in `cat /etc/tables`
雖然,這不會得到由線你輸入/輸出,而是由詞。爲了處理一行行,你應該嘗試這樣的:
cat /etc/tables | while read line
echo $line
done
隨着而循環:
while read line
do
echo "$line"
done < "file"
while IFS= read -r tbl; do echo "$tbl" ; done < /etc/tables
閱讀this。
您可以通過重新定義IFS(輸入字段分隔符),例如
IFS='\t\n'
for tbl in `cat /tmp/tables`
do
echo "$tbl"
done
'\ t \ n'?你真的用bash試過嗎?它會分裂爲'\','t','n',毫無幫助。 – kubanczyk
做在bash很多分析的,我知道這是愚蠢的東西是這樣的。謝謝。 – geoffrobinson