bash exec set redirect use变量不';行不通
我想打开十几个文件。因此,我在bash中使用以下脚本:bash exec set redirect use变量不';行不通,bash,shell,Bash,Shell,我想打开十几个文件。因此,我在bash中使用以下脚本: for i in {20..30} do touch $i exec $i>$i done 但是它不起作用,因为exec不能使用变量asfd来设置重定向 exec $i>$i # is incorrect, where $i is 20 exec 20>$i # is correct 顺便说一句,以下脚本可以工作: for i in {20..30} do touch $i eval exec
for i in {20..30}
do
touch $i
exec $i>$i
done
但是它不起作用,因为exec
不能使用变量asfd
来设置重定向
exec $i>$i # is incorrect, where $i is 20
exec 20>$i # is correct
顺便说一句,以下脚本可以工作:
for i in {20..30}
do
touch $i
eval exec $i\>\$i
done
希望您能解释原因?根据
语法
评估[论据]
这些参数被连接到一个命令中,
然后读取并执行,其退出状态返回为
eval的退出状态。如果没有参数或只有空参数
参数,返回状态为零
eval exec$i\>\$i
将第一个$i
替换为数字,第二个$i
保留原样,因为在这种情况下您已转义了$
。因此,您可以有效地获得exec2>$i
,然后执行该命令
注意:使用bash-x执行并查看发生了什么
但为什么exec$i>$i不起作用
开放式集团基础规范第7期,第2章。Shell命令语言,第节说:
重定向运算符前面可以有一个或多个数字(带
不允许插入字符)来指定文件
描述符编号
如果重定向运算符为“你到底想干什么?为什么不直接使用
cat
?这可能是我在StackOverflow问题中看到的第一次合法使用eval
。+1我认为可以选择转义美元符号;无论参数i
在eval
或exec
期间展开,都会得到相同的结果。