该命令的用途是什么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
其目的显然很明确。