通过运行命令在shell脚本中设置变量

时间:2012-09-16 15:26:49

标签: shell unix

>cat /tmp/list1
john
jack

>cat /tmp/list2
smith
taylor

保证list1和list2的行数相同。

    f(){
        i=1
        while read line
          do
        var1 = `sed -n '$ip' /tmp/list1`
        var2 = `sed -n '$ip' /tmp/list2`
        echo $i,$var1,$var2
        i=`expr $i+1`
            echo $i,$var1,$var2
          done < $INFILE
    }

因此f()的输出应为:

1,john,smith
2,jack,taylor

但是

1,p,p
1+1,p,p

如果我更换以下内容:

var1 = `sed -n '$ip' /tmp/list1`
var2 = `sed -n '$ip' /tmp/list2` 

用这个:

var1=`head -$i /tmp/vip_list|tail -1`
var2=`head -$i /tmp/lb_list|tail -1`

然后输出:

1,john,smith
1,john,smith

2 个答案:

答案 0 :(得分:2)

$ ip是使ip成为变量名称的问题,你应该使用$ {i} p而不是让shell知道变量是我不是ip,你的代码看起来应该是

var1 =`sed -n“$ {i} p”/ tmp / list1`

var2 =`sed -n“$ {i} p”/ tmp / list2`

答案 1 :(得分:2)

如果你可以使用paste和awk命令,你可以用单行代码实现相同的目的:

paste -d, /tmp/list1 /tmp/list2 | awk '{print NR "," $0}'

用此行替换while脚本:)

相关问题