linux - 为什么这个 bash 函数只打印整个字符串的第一个单词?

标签 linux bash shell scripting

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

#!/usr/bash

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

normalMessage="Everything fine"

echo_message() {

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

}

echo_message $normalMessage 

我的输出是:

Everything

最佳答案

正如 Inian 在评论中指出的,您的问题是未引用的变量扩展

echo_message $normalMessage 

成为

echo_message Everything fine

一旦变量扩展,这意味着输入字符串的每个单词都作为单独的参数读入。当这种情况发生时 $1=Everything$2=fine

这是通过双引号变量来修复的,这允许扩展,但意味着扩展的结果仍将作为一个参数读取。

echo_message "$normalMessage"

成为

echo_message "Everything fine"

像这样 $1=Everything fine

以后推荐使用https://www.shellcheck.net/ ,或 shellcheck 的 CLI 版本,它将突出显示各种常见的 bash 问题,包括未加引号的扩展。

关于linux - 为什么这个 bash 函数只打印整个字符串的第一个单词?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50260269/

相关文章:

c - CLOCK_MONOTONIC 进程(或线程)是特定的吗?

linux - Ubuntu 终端打开文件后挂起

bash - 'read -ra' 与直接赋值

linux - 声明命令时的shell脚本错误

java - 在两台 Linux 系统计算机之间从 Java 调用 linux shell 命令

linux - 检查命令输出中的字段是否为空

linux - 使用另一个命令进行管道传输时如何读取命令的返回码

linux - CentOS,unix 通过命令行找出 LONG 或 INT 的长度

比较两个远程线程?

c++ - 在 Solaris 上,连续内存分配不会减小镜像大小