当我尝试在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" "
。那么如何理解这一点?
答案 0 :(得分:4)
您的脚本正在为tmpStr生成以下内容
*
**
***
etc.
导致以下echo语句
echo *
echo **
echo ***
etc.
shell将*解释为通配符,并通过列出当前目录中的所有文件对其进行扩展。
请注意,如果在shell变量周围加上引号:
echo "$tmpstr"
shell不会扩展通配符,输出为
*
**
***
****
*****
******
*******
********
*********
**********