【发布时间】:2020-01-08 13:09:52
【问题描述】:
我在 while 循环中使用 eval 解析变量时遇到了挑战。它使用 getops 脚本在循环外成功处理。
script.sh -l foo1 ($OPT_L)
(在我的脚本中)
foo1=`shuf 1-10 -n 1`
eval LOCATION=\$$OPT_L
如果我回显 $LOCATION,我将按预期得到一个从 1 到 10 的随机值。
在我的循环中,我正在检查 LOCATION 的值是否存在,如果找到匹配项,则使用另一个随机数重新运行 eval,直到 USEDPORT 为 0
循环内的 eval 不起作用。
USEDPORT=$(grep $LOCATION /home_vpn/*/lastport | wc -l)
counter=1
while [ $USEDPORT -ge 1 ] || [ $counter -lt 10 ] ; do
echo "Port $LOCATION is being used $USEDPORT times"
echo "Counter is $counter"
echo "OPTL is $OPT_L"
eval LOCATION=\$$OPT_L
counter=$(( $counter + 1 ))
done
脚本输出:
./vpn-ip-update-add.sh.new -l foo1
10004 端口被使用了 1 次 计数器为 1 端口 10004 被使用了 1 次 计数器为 2 端口 10004 被使用了 1 次 计数器是 3 端口 10004 被使用了 1 次 计数器为 4 10004端口被使用了1次
【问题讨论】:
-
...请注意,声称
eval在 while 循环中不起作用肯定是错误的。如果问题中的代码清楚地表明了这一点,那就太好了,但它需要其他人不会拥有的日志文件,因此它不能真正在 OP 的本地环境之外运行。 (此外,它实际上不包括设置OPT_L所需的getopts代码,或任何手动设置/模拟getopts 正在执行的存根代码)。
标签: bash while-loop eval