Bash eval和dynamic调用变量

时间:2015-03-25 10:07:30

标签: bash case eval

我有一个使用'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)”,但它不起作用。

1 个答案:

答案 0 :(得分:0)

如果您使用数组,这将更加优雅和安全。

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的构造。