【发布时间】:2021-02-25 15:04:52
【问题描述】:
一整天,我经常输入这样的内容:
git stash push -u -m "some phrase as a message"
我更愿意输入:
stpu some phrase as a message
所以在this answer 的帮助下,我在~./bashrc 中创建了一个函数:
function stpu() {
git stash push -u -m "${@}"
}
现在我可以输入stpu "some phrase as a message",这与我想要的非常接近。
如何调整函数以省略双引号?
我尝试了许多不同的变体(添加更多转义的双引号、添加单引号等),但都没有成功。
【问题讨论】:
-
如果您希望将所有参数连接到一个字符串中,您需要使用
"$*"而不是"$@"。也就是说,我强烈建议不要这样做;它会产生不必要的副作用。 -
顺便说一句,re: 函数语法,见wiki.bash-hackers.org/scripting/obsolete——最好只使用
stpu() {,前面不带function。 -
顺便说一句,我的回答中关于安全性和正确性的论点也是为什么运行
ssh somehost 'command to run'比运行ssh somehost command to run更好。如果你不将你的参数引用到ssh,那么它对那些用于远程系统的参数的作用与"$*"的行为相同——将它们组合成一个字符串,但仅在调用 shell 之后已经先与他们合作了。 -
请注意,引号仅用于批量转义单个字符;他们没有定义字符串(因为 shell 中的所有内容都已经是字符串)。
"foo bar"等同于\f\o\o\ \b\a\r,引号中的每个字符都被视为反斜杠转义。由于这些字符中的大多数对 shell 没有特殊含义(\f只是f等),因此它也等同于foo\ bar,因为 shell 只会使用空格来解析序列作为两个单词,而不是包含空格的单个单词。
标签: bash