如何编写bash函数不需要引号?

问题描述

这是一个非常简单的bash函数,它接收一条消息并将其附加到file.txt的末尾。

function n() { 
   message=$1 &&
   echo -e "$message" >> file.txt;
}

要将文本添加到此文件中,我只需运行n "text I want to add"

这一切都很好,但是有没有办法不需要引号呢?相反,该函数之后的所有内容都将被视为消息。

n Everything I write here,after the n,would be saved to the file.txt

基本上,我要告诉bash停止读取n之后的任何内容,这可能是一个功能,而只能将其作为字符串读取。我可以预见,这是通过与echo不同的功能实现的,或者可以通过在n的定义中加上引号来实现,以便在调用n时它们不可见。>

解决方法

使用$@获取所有参数。

function n() { 
   echo -e "$@" >> file.txt;
}

请注意,shell在调用命令/功能之前,在命令行 上执行了单词拆分,通配符处理,花括号扩展和其他扩展。除了将它们放在引号中之外,没有其他方法可以告诉他们这些参数应该单独放置。因此,如果您在参数中的一个单词之间放置多个空格,除非您引用它们,否则它们将被折叠为一个空格。如果通配符与任何文件名匹配,它们将被扩展。