linux - shell脚本的意外行为

标签 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""。那么如何理解这一点?

最佳答案

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

*
**
***
etc.

这会产生以下 echo 语句

echo *
echo **
echo ***
etc.

shell 将 * 解释为通配符并通过列出当前目录中的所有文件来扩展它。

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

echo "$tmpstr"  

shell不展开通配符,输出为

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

关于linux - shell脚本的意外行为,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20135739/

相关文章:

java - JVM 在 java.util.zip.ZipFile.getEntry 中崩溃

linux - awk shebang 不起作用

bash - awk 打印在 bash shell 脚本中不起作用

bash - 没有 BASH 的 UNIX shell 有什么好处?

linux -/sites/default/files/中的我的 tmp 文件夹在 DRUPAL 7 中不会自动清除

php - 在 Joomla 中获取文件内容

bash - 在两个分隔符之间提取多行数据

bash - 在 sed 中使用变量

bash - 我想创建一个 shell 脚本,它将创建一个预格式化的文件并使用文件名作为参数在 vim 中打开它

windows - 在 Windows 上递归删除目录的内容