首页 > 解决方案 > 如何编写不需要引号的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调用时它们是不可见的。

标签: stringbashfunctionescaping

解决方案


用于$@获取所有参数。

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

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


推荐阅读