当我试图将一些模式与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不扩展通配符,输出为
*
**
***
****
*****
******
*******
********
*********
**********

09-19 12:39