我是新手来编写脚本,我正在尝试通过制作这个简单要求一系列数字的小脚本来练习.我会输入前.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
Run Code Online (Sandbox Code Playgroud)
Sie*_*geX 15
eval和命令替换来解决这个问题$()eval是邪恶的,因为你需要消毒你的输入,否则人们可以输入范围rm -rf /;,eval并将运行function关键字,它不是POSIX并且已被弃用read的-p标志,而不是回声但是,出于学习目的,您可以这样做:
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
Run Code Online (Sandbox Code Playgroud)
注意:在这种情况下,使用eval是正常的,因为您只是echo在范围内
一种方法是使用eval粗略的例子,
for i in $(eval echo {0..$range}); do echo $i; done
Run Code Online (Sandbox Code Playgroud)
另一种方法是使用bash的C风格for循环
for((i=1;i<=20;i++))
do
...
done
Run Code Online (Sandbox Code Playgroud)
最后一个比第一个更快(例如,如果你有$ range> 1 000 000)
解决缺乏扩展的一种方法是跳过eval的问题是使用命令替换和seq.
重写函数(也避免全局变量):
function func_print_range
{
for n in $(seq $1 $2); do
echo $n
done
}
func_print_range $start $end
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11862 次 |
| 最近记录: |