糟糕的替换

  • 本文关键字:替换 bash bash4
  • 更新时间 :
  • 英文 :


我遇到了一个看似非常简单的问题,我似乎无法解决,我从 bash 得到的唯一帮助是这是一个糟糕的替换。有什么帮助吗?

#!/bin/bash
lang=Python
frameworks=('Python=(Django Flask Pyramid)' 'Ruby=(Rails Cuba)')
for i in "${frameworks[@]}";do eval $i;done
echo "Python ${#$lang[@]} ${$lang[@]}"
echo "Ruby ${#Ruby[@]} ${Ruby[@]}"

上面的第 5 行是抛出错误的原因,但第 6 行工作正常,哪个应该做同样的事情?

输出:

>>>line 5: Python ${#$lang[@]} ${$lang[@]}: bad substitution
>>>Ruby 2 Rails Cuba

你不能以这种方式使用$lang(显然)。bash数组构造${name[@]}有点神圣。如果你想以这种方式尊重$lang,你需要另一个eval

试试这个:

eval "echo "Python  ${#$lang[@]} ${$lang[@]}""

使用间接寻址。将要扩展的内容分配给变量(在本例中为 Python[@]),然后使用 ${!thatvariable}

mything="$lang[@]"
echo "${!mything}"

相关内容

  • 没有找到相关文章

最新更新