string - 如何编写不需要引号的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在调用命令/函数之前会在命令行上执行分词、通配符处理、大括号扩展和其他扩展。除了将它们放在引号中之外,没有办法告诉它应该单独留下参数。因此,如果您在参数中的单词之间放置多个空格,除非您引用它们,否则它们将被折叠成一个空格。如果通配符匹配任何文件名,它们将被扩展。
推荐阅读
- python - 尝试使用 scipy 将三角函数拟合到数据中
- git - 为什么我通过 git 登录 Overleaf 有问题
- python - 如何制作透明的pygame.draw.circle
- javascript - 为什么我的变量是空的,而不是在 JS 中未定义?
- r - 使用 R merge() 收集不匹配的 ID
- php - 在PHPWord中处理模板时保存模板后没有打开
- android - 在亚马逊商店测试应用更新,失败 [INSTALL_FAILED_UPDATE_INCOMPATIBLE]
- javascript - TypeError: Cannot read property 'then' of undefined --- How do I resolve this?
- html - 如何制定只影响文本但不影响图像的 CSS 规则?
- c# - dotnet core 中有没有办法直接在 DTO 中将对象字段反序列化为字符串?