
我在 Linux 腳本中有以下命令。
#!/bin/bash
for i in "001 ARG1" "002 ARG2" "003 ARG3"
do
set -- $i
echo $1
echo $2
done
001 和 ARG1 本質上是元組,
有沒有辦法將這些元組移動到文字檔中,我可以將其載入到 forloop 中?這麼多我會保存這樣的文字文件
ARG1
ARG2
ARG3
或者
001 ARG1
002 ARG2
003 ARG3
腳本將是
for i in textfile.txt
do
set -- $i
echo $1
echo $2
done
並得到相同的結果?
還有沒有辦法讓 001 002 自動計數?就像在 python 中如何設定 counter = 0 和 counter+=1 並分配一個變數一樣。
答案1
在檔案的每一行上給出兩個空格或製表符分隔的單詞,如輸入檔案的第二個範例所示:
while read -r word1 word2; do
echo "$word1"
echo "$word2"
done <textfile.txt
這會將每行的第一個單字讀入$word1
,並將該行的其餘部分讀入$word2
。
的輸入read
由複合命令的輸入給出while
,該命令透過重定向從檔案中獲取它。
如果該字元出現在輸入中,則可以停止以任何特殊方式-r
進行read
解釋的選項。\
每行一個單字和一個計數器:
counter=0
while read -r word; do
counter=$(( counter + 1 ))
echo "$counter"
echo "$word"
done <textfile.txt
這會在每次迭代中將計數器加一(對於從 讀取的每一行textfile.txt
)。
要獲得一個以零填充的三位數計數器,請使用printf
以下格式字串輸出計數器%.3d\n
:
printf '%.3d\n' "$counter"
.... 代替echo "$counter"
.
有關含義的說明%.3d\n
,請參閱 C 庫函數的文檔printf
(man 3 printf
,shell 等效項主要使用相同的格式字串)。