我在 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 等效项主要使用相同的格式字符串)。