我正在编写一个接受两个参数的脚本:
#! /bin/bash
eval for i in {$1..$2}; do echo $i; done
Run Code Online (Sandbox Code Playgroud)
我运行它:
$ ./myscript 0002 0010
syntax error near unexpected token `do'
Run Code Online (Sandbox Code Playgroud)
为什么是错误?
我认为这可能是因为循环应该分组。但是通过替换eval for i in {$1..$2}; do echo $i; done
为eval { for i in {$1..$2}; do echo $i; done; }
,错误仍然存在。
注意:我希望在大括号扩展之前使用eval
. 我的示例所需的输出是0002 0003 0004 0005 0006 0007 0008 0009 0010
. (请参阅在大括号扩展之前执行参数扩展?)
那是因为shell评估了;
,所以eval
没看到。
您必须转义任何 shell 特殊字符以延迟其评估,并且从字面上传递到eval
:
eval for i in \{"$1".."$2"\}\; do echo \"\$i\"\; done
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2655 次 |
最近记录: |