为什么我不能将此 awk 语句的输出保存到变量中



>我目前正在尝试制作一个由另一个变量组成的变量名称

while [ "$countf" -le 9 ]; do
    vname=$( echo fcp"$countf" )
    $vname=$( awk -F, -vs="$fc$countf" '{for (i=1;i<=NF;i++)if($i~"^"s"$"){print i;exit;}}{print "not found"}' <<< $first_line )
    countf=$(( countf + 1 ))
done

尽管当我执行包含代码的脚本时,会输出

如下内容:
fcp1=not: command not found

FCP1 是 VNAME 变量的内容。我已经尝试了几种不同的解决方案,但到目前为止还没有任何东西可以工作,如果有人可以指出我做错了什么,尽管我真的很感激,谢谢。

你犯了一个错误,而不是

$vname=$(... )

您应该使用 :

vname=$(... )

您不能像这样在分配的左侧使用$

解决方法是使用 declare 如果要执行间接变量引用

$ x=var
$ declare $x=test
$ echo $var
test

注意

正如本标题中的讨论中所述,请勿使用eval来执行此操作。 eval邪恶的常见拼写错误。请参阅 http://mywiki.wooledge.org/BashFAQ/048

如果要

从这样的部分构建变量名,则需要使用 eval:

$ cat tst.sh
countf=0
while (( $countf <= 2 ))
do
    vname="fcp${countf}"
    eval $vname="$(date)"
    countf=$(( countf + 1 ))
    sleep 1
done
echo "$fcp0"
echo "$fcp1"
echo "$fcp2"
$ ./tst.sh
Mon Nov 19 21:22:05 CST 2012
Mon Nov 19 21:22:06 CST 2012
Mon Nov 19 21:22:08 CST 2012

但是你应该认真考虑一个数组:

$ cat tst.sh
countf=0
while (( $countf <= 2 ))
do
    fcpArr[$countf]="$(date)"
    countf=$(( countf + 1 ))
    sleep 1
done
echo "${fcpArr[0]}"
echo "${fcpArr[1]}"
echo "${fcpArr[2]}"
$ ./tst.sh
Mon Nov 19 21:22:48 CST 2012
Mon Nov 19 21:22:50 CST 2012
Mon Nov 19 21:22:51 CST 2012

相关内容

  • 没有找到相关文章

最新更新