Bash eval 和动态调用变量

Bash eval and dynamic call the variable

我有一个使用 'eval' 命令的 bash 脚本。 我不知道这是否是个好主意,但我需要这样做:

i=1
for e in $items; do 
    echo $i - $e
    eval vm_$i=$e
    let i++
done

然后我显示一个这样的菜单:

while [ "$c" != "q" ]; do
    read c
    case $c in
            1)
            echo "CB Node $vm_1"
            ssh "$vm_1" "couchbase-cli server-info -c $cluster"
            ;;
            2)
            ;;
            3)
            ;;
            l) echo "Listing cluster nodes... "

            ;;
            q) exit 2
    esac

完成

它有效,但现在我想在我的 'case' 中使用变量 $c 来生成好的变量 $vm1 ($vm_$c, $c 实际上对应于 $i..)。 我尝试了一些类似的东西:echo "CB Node $( eval $vm$c)",但它不起作用。

如果您改用数组,这一切都会更加优雅和安全。

vm=(dummy $items)
vm[0]=''  # get rid of dummy zero index

while true; do
     read -p 'Quick, do something! ' c
     case $c in
       [1-${#vm[@]}])
         echo "CB Node ${vm[$c]}"
         ssh "${vm[$c]}" "couchbase-cli server-info -c $cluster" ;;
       l)
         : ;;
       q) exit 2;;
       *) echo 'Try again.';;
    esac
done

数组和间接引用 ${!var} 是 Bash-only 构造。