当我试图将一些模式与shell中的*
进行组合时,我很困惑。代码是:
#!/bin/bash
for i in {1..10}
do
tmpstr=""
for ((c=1;c<=i;c++))
do
tmpstr=$tmpstr'*'
done
echo $tmpstr #add some string after tmpstr will work
done
输出显示了每行
ls
命令的结果,这是意外的。如果我在echo $tmpstr
之后添加任何字符串,代码就会正常工作。例如,echo $tmpstr" "
。那么如何理解这一点呢? 最佳答案
您的脚本正在为tmpstr生成以下内容
*
**
***
etc.
这将导致以下echo语句
echo *
echo **
echo ***
etc.
shell将*解释为通配符,并通过列出当前目录中的所有文件来展开它。
注意,如果在shell变量周围加引号:
echo "$tmpstr"
shell不扩展通配符,输出为
*
**
***
****
*****
******
*******
********
*********
**********