我正在努力解决这个问题:
komanda=$(dialog --title "COMMAND" --backtitle "ENTER COMMAND: "
--inputbox "" 8 180 2>&1 >/dev/tty)
if [ $? == 0 ] then
for ((j=0;j<$tlen;j++))
do
shopnum=${selectedRPODS[j]}
$komanda #executing the entered comand with variables.
done
fi
当我在输入框中输入变量时,参数将作为字符串传递。在$ komanda
执行时,变量不起作用示例输入文字:
ping $shopnum
始终返回:
ping: unknown host $shopnum
我想将变量作为ping的目标。我知道我对STDOUT做错了什么,但我无法找到正确的方法。
提前致谢。
答案 0 :(得分:0)
参数扩展不是递归的。如果您输入ping $shopnum
,则$komanda
会扩展为文字文字ping $shopnum
,而不是ping 3
或已分配给shopnum
的任何值。
在这种情况下,由于您的目的是执行任意shell代码,因此您将使用eval
:
eval "$komanda"
但是,最好重新考虑您的设计,以便用户不需要知道代码中存在哪些变量名称。