Scripting

如何循環變數

  • December 16, 2016

我的 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]'`

注意,我使用的是 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
  • 是文件通配模式。文件通配是指將命令行上的模式替換為目前目錄中與通配模式匹配的任何文件名。* 表示“任何東西”

引用自:https://unix.stackexchange.com/questions/330865