Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何调整bash函数,以便省略双引号?_Bash - Fatal编程技术网

如何调整bash函数,以便省略双引号?

如何调整bash函数,以便省略双引号?,bash,Bash,在一整天中,我经常输入这样的内容: git stash push-u-m“一些短语作为消息” 我更喜欢打字: stpu将一些短语作为消息使用 因此,在的帮助下,我在我的~./bashrc中创建了一个函数: function stpu() { git stash push -u -m "${@}" } 现在我可以输入stpu“一些短语作为消息”,这与我想要的非常接近 如何调整函数以省略双引号? 我尝试过许多不同的变体(添加更多转义的双引号、添加单引号等),但都没有成功。如

在一整天中,我经常输入这样的内容:

git stash push-u-m“一些短语作为消息”

我更喜欢打字:

stpu将一些短语作为消息使用

因此,在的帮助下,我在我的
~./bashrc
中创建了一个函数:

function stpu() {
  git stash push -u -m "${@}"
}
现在我可以输入
stpu“一些短语作为消息”
,这与我想要的非常接近

如何调整函数以省略双引号?

我尝试过许多不同的变体(添加更多转义的双引号、添加单引号等),但都没有成功。

如果使用
“$*”
而不是
“$@”
这将把所有参数连接到一个字符串中,并用空格分隔(默认情况下,
IFS
中的第一个字符,如果已被覆盖)
-m
希望后面跟着一个字符串(而不是每个单词单独的参数),所以这正是它想要的


这是不可靠的,最好只使用引号。 安全 如果希望使用提交消息:
Make$(rm-rf~)safe in a argument name
进行安全修复,请考虑作为一个示例。如果这个字符串是不带引号(或双引号)的,那么这个命令是在函数启动之前执行的(这很有意义:函数只有在参数列表已知之后才能调用),因此函数无法修复它。在这种情况下,使用单引号防止命令替换发生是正确和安全的做法

(单引号包含单个引号的字符串,考虑使用:<代码> $' i是单个引用的字符串,其中包含一个引用“< /COD> >”

正确性
或者,作为另一个示例:
仅处理与*.csv
匹配的文件——如果未引用,
*.csv
可以替换为运行命令的目录中存在的csv文件列表。同样,这发生在函数启动之前,因此函数内部没有任何东西可以阻止它。

如果要将所有参数合并成一个字符串,则需要使用
“$*”
而不是
“$@”
。尽管如此,我强烈建议不要这样做;这会有不必要的副作用。顺便说一句,re:function语法,请参阅——最好只使用
stpu(){
没有前面的
函数
。顺便说一句,我在回答中提出的关于安全性和正确性的论点也是为什么运行
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只会使用空格将序列解析为两个单词,而不是包含空格的单个单词。哇,很好。我很高兴我问了。如果允许的话,我会接受答案。谢谢。