3 回答
TA贡献1840条经验 获得超5个赞
对我来说,我不得不更改“#!/ bin / bash”的标题,但是显然这对您来说不是问题。
在回显中,仅打印带有$ 1的第一个单词,如果将其更改为$ 2,则将打印第二个单词(参数),依此类推。
您可以在引号内传递名称,也可以使用$ @打印所有参数。
解决方案1(带有$ @):
lbGREEN='\e[1;92m'
NC='\e[0m'
normalMessage="Everything fine"
echo_message() {
echo -e ${lbGREEN}$@${NC}
}
echo_message $normalMessage
解决方案2(带引号):
lbGREEN='\e[1;92m'
NC='\e[0m'
normalMessage="Everything fine"
echo_message() {
echo -e ${lbGREEN}$1${NC}
}
echo_message "$normalMessage"
TA贡献1942条经验 获得超3个赞
您引用的报价有误。
如果要模拟的行为echo
,您的函数应接受多个参数,并全部打印出来。目前,它仅评估第一个参数,因此建议$*
改用。您还需要将参数括在双引号中以保护任何特殊字符:
echo_message() { echo -e "${lbGREEN}$*${NC}"}
特殊变量$*
将扩展到所有参数,并用空格(或更准确地说,是$ IFS的第一个字符,通常是空格字符)分隔。请注意,您几乎总是想要"$@"
而不是"$*"
,这是少数情况也是正确的,尽管如果IFS
将其设置为非标准值,其语义稍有不同。
现在,该函数支持多个参数,并以绿色打印所有参数,并用空格分隔。但是,我建议您在调用函数时也引用该参数:
echo_message "$normalMessage"
尽管$normalMessage
现在可以正确处理其中的空格,但其他特殊字符(如)!
仍需要加引号。
- 3 回答
- 0 关注
- 319 浏览
添加回答
举报