当我尝试在 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不展开通配符,输出为
*
**
***
****
*****
******
*******
********
*********
**********
关于linux - shell脚本的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20135739/