为何Bash函数仅输出字符串的第一个单词?
解决bash函数仅输出消息第一个单词的问题
你的问题出在参数传递时的分词处理上,我来帮你搞定它!
问题根源
当你执行echo_message $normalMessage时,Bash会把变量$normalMessage里的空格当作参数分隔符,把Everything和fine拆成两个独立的参数传给函数。而你的函数里只读取了第一个参数$1,所以自然只输出Everything。
修复方案
有两种简单的方式解决这个问题:
方案1:调用函数时给变量加双引号
修改调用语句,把变量用双引号包裹,这样Bash会把整个字符串当作一个完整的参数传递:
#!/usr/bash lbGREEN='\e[1;92m' NC='\e[0m' normalMessage="Everything fine" echo_message() { echo -e ${lbGREEN}$1${NC} } # 这里给变量加双引号 echo_message "$normalMessage"
方案2:函数内部接收所有传入参数
如果你的函数需要支持传递多个参数(比如直接传多个单词),可以用"$*"或者"$@"来接收所有参数,它们会把所有传入的参数拼接成一个完整的字符串:
#!/usr/bash lbGREEN='\e[1;92m' NC='\e[0m' normalMessage="Everything fine" echo_message() { # 使用"$*"接收所有参数并拼接 echo -e "${lbGREEN}$*${NC}" } # 此时加不加引号都能正常输出,但建议还是加引号保持规范 echo_message "$normalMessage" # 也可以直接传多个单词 echo_message "Hello World"
小提示
在Bash中处理字符串时,给变量加双引号是个好习惯,它能避免很多因为分词、特殊字符展开导致的意外问题。比如如果你的消息里包含空格、星号*这类字符,不加引号的话Bash会做额外的处理,导致结果不符合预期。
内容的提问来源于stack exchange,提问作者s-kaczmarek
相关产品推荐
相关产品推荐

