首页 > 解决方案 > 为什么这个 bash 函数只打印整个字符串的第一个单词?

问题描述

我正在尝试创建以某种颜色打印绑定到变量的消息的函数。消息变量作为此函数的参数传递。问题是我只得到第一个空格的文本(只有消息的第一个字)。我的脚本如下所示:

#!/usr/bash

lbGREEN='\e[1;92m'
NC='\e[0m'

normalMessage="Everything fine"

echo_message() {

    echo -e  ${lbGREEN}$1${NC}

}

echo_message $normalMessage 

我的输出是:

Everything

标签: linuxbashshellscripting

解决方案


对我来说,我不得不更改“#!/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"

推荐阅读