bash:capture'\*';在命令行中

bash:capture'\*';在命令行中,bash,Bash,现在运行它: function abc () { echo "You typed exactly this: $1" } 我得到: myprompt$ abc abc\* 我正在编写一个函数,其中需要捕获整个参数,包括反斜杠,以备将来使用。能做到吗?我尝试了引号和“set”的每一种组合,但没有任何东西能保留反斜杠。我知道我可以逃避它,但这样键入的参数就不会与回显的参数完全相同。请注意,您可以通过“历史”完美地恢复论点。如何在函数、反斜杠和星号以及所有内容中捕获它?shell将命令行上的

现在运行它:

function abc ()
{
   echo "You typed exactly this: $1"
}
我得到:

myprompt$ abc abc\*

我正在编写一个函数,其中需要捕获整个参数,包括反斜杠,以备将来使用。能做到吗?我尝试了引号和“set”的每一种组合,但没有任何东西能保留反斜杠。我知道我可以逃避它,但这样键入的参数就不会与回显的参数完全相同。请注意,您可以通过“历史”完美地恢复论点。如何在函数、反斜杠和星号以及所有内容中捕获它?

shell将命令行上的
\
字符解释为转义字符,从而删除以下字符的任何特殊含义。为了在命令行中有一个文本
\
,您需要说服shell忽略
\
的特殊含义,您可以在它前面放一个
\
。像这样:

You typed exactly this: abc*
myprompt$ abc abc\\\*
请注意,有三个
\
字符。第一个命令告诉shell忽略以下字符的特殊含义,即第二个
\
。第三个
\
告诉shell忽略
*
的特殊含义

说服shell不要将
\
解释为转义字符的另一种方法是将参数放在单引号中。像这样:

You typed exactly this: abc*
myprompt$ abc abc\\\*

您无法获得与键入的参数完全相同的参数。Bash在函数看到它们之前对它们进行求值。你必须逃避或引用它

myprompt$ abc 'abc\*'

您可以始终采用鸟枪对抗苍蝇的方法,实现您自己的外壳。:)

或者把它调小一点,找到一个支持您想要的输入机制的shell

请注意,您必须更改登录设置以使用“逐字shell”

看起来可以在函数中捕获精确的命令行。 正如我所怀疑的,“历史”给了我们一种方式:

abc abc\\*
abc 'abc\*'

想法?这能改进吗

如果你需要反斜杠,那么你就是。快速答案:-)嘿,我如何在答案框中开始一行新行?当我点击回车键时,它会发布它。我如何开始一个新的滑翔伞?不管怎么说,你是说这件事做不到?但是如果是这样的话,历史记录是如何完美保存的呢?注释框应该是一行,所以按enter键提交而不是插入返回。我想说的是,你无法在函数中获得它们在行上显示的确切参数。您可以转义需要它的字符,在这种情况下,您将看不到反斜杠,或者您可以引用它,但您将看不到函数内部的引号。历史会按显示的方式保存,因为它是在计算之前从bash二进制文件中保存的。谢谢,先生们。好的,但以上所有的结果都不完美地抓住了整个论点,因为有些东西总是被剥去。我想说的是,整个arument都保存到了历史列表中,所以在某个地方,如何,bash知道如何绝对地用文字来对待一个论点,我想知道我是否能够以某种方式获得这种能力。我还没有完全准备好;-)我想现在我只需要搜索并替换以重新插入反斜杠。但有人可能会认为,bash可能有某种开关或“set”,可以指示它在需要的情况下保持命令行不变你可以使用sed、awk或者其他很多东西来改进“field3和更高版本”的逻辑。也许
foo=“$(历史1)”;切割-d'-f2-