在 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"
更广泛地说,几乎总是引用变量是个好主意。
我正在编写一个方法来按以下格式打印程序名称:
*****************
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"
更广泛地说,几乎总是引用变量是个好主意。