我是 bash 脚本的新手,我正在尝试通过制作这个只要求输入一系列数字的小脚本来练习。我会进入前。 5..20 并且它应该打印范围,但是 - 它只是回显我输入的任何内容(本例中为“5..20”)并且不会扩展变量。谁能告诉我我做错了什么?
脚本:
echo -n "Enter range of number to display using 0..10 format: "
read range
function func_printrage
{
for n in {$range}; do
echo $n
done
}
func_printrange
最佳答案
- bash 中的大括号扩展不会扩展参数(与 zsh 不同)
- 您可以通过使用
eval
和命令替换$()
来解决这个问题
eval
是邪恶的,因为你需要清理你的输入,否则人们可以输入像rm -rf/;
这样的范围,而eval
将运行它- 不要使用
function
关键字,它不是 POSIX 且已被弃用 - 使用
read
的-p
标志代替echo
但是,出于学习目的,您可以这样做:
read -p "Enter range of number to display using 0..10 format: " range
func_printrange()
{
for n in $(eval echo {$range}); do
echo $n
done
}
func_printrange
注意:在这种情况下,使用 eval
是可以的,因为您只是echo
'ing 范围
关于bash - 使用 {$var} 在 for 循环中进行变量替换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5447302/