它是什么?

它是什么?

该命令的用途是什么quote?我没有找到有关它的任何信息,它不在/bin文件夹中的可执行文件中,在 Bash 内置程序中也找不到它。它似乎只打印其第一个参数,就像一个echo命令一样,仅此而已。

答案1

它是什么?

我注意到这个命令在我的 shell 中不起作用(fish,友好的交互式外壳)。它似乎只在 bash(Ubuntu 的默认设置)中起作用。

chocobai@pc ~> /bin/bash 
chocobai@pc:~$ quote asdf
'asdf'chocobai@pc:~$ 

chocobai@pc:~$ type quote
quote is a function.
quote ()
{ 
    local quoted=${1//\'/\'\\\'\'};
    printf "'%s'" "$quoted"
}

它有什么作用?它有什么用途?

它会添加引号但不添加换行符。它还会以适合 bash 的方式转义单引号。在脚本中,它可以用于引用变量或其他类型的字符串。例如,对于带有空格的路径/参数,您需要这样做。尽管还有其他方法可以做到这一点。

很奇怪我在网上找不到任何关于它的文档。不过,很容易就能看出它的作用。

答案2

quote是一个在文件中定义的函数(在我的 Debian 系统上,但我猜在 Ubuntu 上也是一样的) ,它本身在 Bash 启动时/usr/share/bash-completion/bash_completion由它来调用。/etc/bash.bashrc

我永远不会使用这个函数!如果您需要引用内容以便 shell 可以安全使用,请使用printf修饰符%q,例如:

printf '%q\n' "Hello my friend I like 'single quotes' as well as \"double quotes\""

事实上,即使这个很少使用,但对于高级的东西,总是有更好的策略,就像我们用户通常做的那样。这个quote东西被一些我们甚至不想知道的晦涩的东西内部使用。这个quote函数可能是特定于供应商/发行版的(阅读特定于 Debian),可能根本无法移植,甚至可能在未来的版本中发生变化。

编辑。我刚刚在 Ubuntu 12.04 系统上检查过,该quote函数在 中定义/etc/bash_completion,来源于/etc/bash.bashrc,其本身也来源于/etc/profile

我如何确定这一点?使用一些启发式方法:

  • 检查是否quote出现在/etc/profile

    grep '\bquote\b' /etc/profile
    

    否。转到下一步。

  • 文件来源是什么/etc/profile

    grep '[[:space:]]\.[[:space:]]' /etc/profile
    

    我有$i(需要查看此来源的来源,但在这种情况下它是文件/etc/profile.d/*.sh(如果有)(并且如果可读)和/etc/bash.bashrc。正在查看/etc/bash.bashrc

  • quote在吗/etc/bash.bashrc?是/否,等等...

答案3

quote是一个函数:

quote () 
{ 
    local quoted=${1//\'/\'\\\'\'};
    printf "'%s'" "$quoted"
}

此函数在 bash 初始化文件的某个地方定义。更准确地说,如果您使用的是 Ubuntu 13.04,则可以在/usr/share/bash-completion/bash_completion第 142 行找到它。

使用以下命令来检查:

type quote

其目的显然很明确。

相关内容