
我的 csh 腳本中有一個命令可以提供至少 2 行輸出,但可能更多。我將這些行轉換為單獨的變量,然後將其傳遞給另一個命令。如何將第二個命令設定為循環並運行命令 1 輸出的每個變數?下面是我將命令 1 的輸出轉換為變數的內容。
set vars = `echo "command 1"`
set numRows = $#vars
if ($numRows < 2) then
echo "ERROR! $numRows rows!"
exit
endif
`echo '/command2 -L '$vars[1]'`
答案1
注意,我使用的是 bash,而不是 csh,因為我不討厭自己。但你可以在 csh 中完成所有這些,你只需要翻譯。如果您想在 bash 中工作,只需先執行“bash --login”,然後您就可以在 bash 中工作。
為了完成您在 shell 腳本中描述的那種任務,我們使用管道而不是像在程式語言中那樣使用循環。別誤會我的意思,那裡是csh 和 bash 中的循環結構,但對於您所描述的,我們採用不同的方式。
如果我有一個命令可以產生多行輸出,並且我希望另一個命令一次對這些行執行一行操作,那麼我會使用管道 | 連接這兩個命令。 ,也許像這樣:
貓檔.txt | grep“一些單字”
grep 指令處理來自 STDIN 的每一行,該行透過管道連結到 cat 指令的 STDOUT。這是一個微不足道的例子,但它很有用。
其他:
echo '一、二、三' | tr ',' '\n'
這將用換行符號替換所有逗號,從一行輸入建立三行輸出。
如果我想為目錄中所有文件的名稱添加擴展名,我可能會這樣做:
cd directory
for filename in *
do
mv ${filename} ${filename}.extension
done
* 是檔案通配模式。檔案通配是指命令列上的模式被替換為目前目錄中與通配模式相符的任何檔案名稱。 * 表示“任何東西”