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 构造。
我有一个使用 '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 构造。