shell脚本的意外行为

时间:2013-11-22 02:14:36

标签: linux bash shell

当我尝试在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" "。那么如何理解这一点?

1 个答案:

答案 0 :(得分:4)

您的脚本正在为tmpStr生成以下内容

*
**
***
etc.

导致以下echo语句

echo *
echo **
echo ***
etc.

shell将*解释为通配符,并通过列出当前目录中的所有文件对其进行扩展。

请注意,如果在shell变量周围加上引号:

echo "$tmpstr"  

shell不会扩展通配符,输出为

*
**
***
****
*****
******
*******
********
*********
**********