我有以下 shell 脚本代码。在这里,如果我使用NR==$i
ingawk
语句,它不起作用,而如果我只是使用NR==1
(或其他一些整数值),它工作得非常好。
for ((i=1;i<=5;i++))
do
gawk 'NR==$i{//some action}' input.txt
done
谁能让我知道这里有什么问题?
问题是脚本周围的单引号awk
意味着bash
在字符串内部没有替换并且gawk
从字面上看(这与脚本中未初始化$i
的情况相同)。$0
i
gawk
这一次,使用双引号代替:
for ((i=1;i<=5;i++))
do
gawk "NR==$i{//some action}" input.txt
done
一般来说,显式传递变量可能会更好:
for ((i=1;i<=5;i++))
do
gawk -v i=$i 'NR==i{//some action}' input.txt
done
这样做的问题是您'
在 gawk 脚本周围使用了简单的引号 (),并且在其中bash
不会替换 的值$i
,因此请尝试使用双引号 ( "
)。