在bash中将变量设置为带有变量的内联?

时间:2013-08-12 14:34:15

标签: bash

我试图将变量的值一遍又一遍地设置为文件的一行。

for i in {1..5}
   do
       THIS = "grep -m $i'[a-z]' newdict2" | tail -1
       echo $THIS
   done

这个黑魔法的诀窍是什么?

2 个答案:

答案 0 :(得分:1)

使用sed比使用tail和grep' s -m选项更容易运行它:

for i in {1..5}
do
    THIS=$(grep -e '[a-z]' newdict2 | sed -ne "${i}p")
    echo "$THIS"
done

如果从1开始到x,其他解决方法是通过循环读取:

while IFS= read -r THIS; do
    echo "$THIS"
done < <(grep -e '[a-z]' newdict2)

通过awk:

while IFS= read -r THIS; do
    echo "$THIS"
done < (awk '/[a-z]/ && ++i <= 5' newdict2)

另一个具有不同初始值的awk版本:

while IFS= read -r THIS; do
    echo "$THIS"
done < (awk 'BEGIN { i = 2 } /[a-z]/ && i++ <= 5' newdict2)

答案 1 :(得分:0)

最好一次找到事件,然后循环它们。

grep -m "$i" '[a-z]' newdict |
nl |
while read i THIS; do
    echo "$THIS"
done

如果您对循环内的任何内容不需要$i,请移除nl,然后移除read THIS

还要注意在变量插值周围使用双引号。