在 bash 中连接 * 和 *

Concatenation of * with * in bash

我正在编写一个方法来按以下格式打印程序名称:

*****************
   programName
*****************

下面是我的代码

#!/bin/bash

welcomeMsg(){
    simpleProgName=`echo  | cut -d'/' -f2 | cut -d'.' -f1`
    simpleProgNameLength=${#simpleProgName}
    asteriskCount=$((simpleProgNameLength + 3))
    simpleProgName="   $simpleProgName" 
    asteriskString="__"
    echo $asteriskCount

    for ((i=1;i<asteriskCount;i++));
    do
    asteriskString+="*"     
    echo $asteriskString
    done

    echo $asteriskString
    echo $simpleProgName
    echo $asteriskString
}
programName=[=12=]
welcomeMsg $programName

l=
b=$i2
validate(){
    echo "Validation"
}

输出:

12                                                                                                                     
__*                                                                                                                    
__**                                                                                                                   
__***                                                                                                                  
__****                                                                                                                 
__*****                                                                                                                
__******                                                                                                               
__*******                                                                                                              
__********                                                                                                             
__*********                                                                                                            
__**********                                                                                                           
__***********                                                                                                          
__***********                                                                                                          
bannerSim
__***********

但是当我用 "*" 实例化 asteriskString 时 输出变为

12
bannerSim.sh
bannerSim.sh
bannerSim.sh
bannerSim.sh
bannerSim.sh
bannerSim.sh
bannerSim.sh
bannerSim.sh
bannerSim.sh
bannerSim.sh
bannerSim.sh
bannerSim
bannerSim.sh

asteriskString 保留程序文件名称的值,并且不会在循环体中连接字符串,但是会执行循环。 请告诉我为什么会这样。 谢谢。

像这样的命令:

echo *****

打印当前目录的内容(有一些注意事项)。

如果你不想asteriskString的内容被解释为一个潜在的fileglob,那么你需要引用它:

echo "$asteriskString"

或更好:

printf '%s\n' "$asteriskString"

更广泛地说,几乎总是引用变量是个好主意。