wht*_*ger 16 command-line bash
命令的用途是quote
什么?我没有找到任何关于它的信息,它不在文件/bin
夹中的可执行文件中,也无法在 Bash 内置程序中找到。它似乎只打印它的第一个参数,就像一个echo
命令,仅此而已。
ver*_*ilt 12
我注意到这个命令在我的 shell(鱼,友好的交互式 shell)中不起作用。它似乎只适用于 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"
}
Run Code Online (Sandbox Code Playgroud)
它添加了引号但没有换行符。它还以适合 bash 的方式转义单引号。在脚本中引用变量或其他类型的字符串很有用。例如,对于带有空格的路径/参数,您需要这个。虽然还有其他方法可以做到这一点。
真的很奇怪我找不到任何关于它的文档(在网上)。但是,很容易看出它的作用。
quote
是一个在文件中定义的函数(在我的 Debian 系统上,但我猜它在 Ubuntu 上是一样的),文件/usr/share/bash-completion/bash_completion
本身来自/etc/bash.bashrc
Bash 的启动。
我永远不会使用这个功能!如果您需要引用内容以便 shell 可以安全使用,请printf
与%q
修饰符一起使用,如:
printf '%q\n' "Hello my friend I like 'single quotes' as well as \"double quotes\""
Run Code Online (Sandbox Code Playgroud)
事实上,即使这很少使用,对于高级别的东西总是有更好的策略,就像我们用户通常做的那样。这个quote
东西被一些我们甚至不想知道的晦涩的东西在内部使用。此quote
功能可能是特定于供应商/发行版的(阅读 Debian 特定的)并且可能根本不可移植,甚至可能在未来版本中更改。
编辑。我刚刚检查了一个 Ubuntu 12.04 系统,该quote
函数在 中定义/etc/bash_completion
,来自/etc/bash.bashrc
,本身来自/etc/profile
.
我是如何确定这一点的?使用一点启发式:
检查是否quote
出现在/etc/profile
:
grep '\bquote\b' /etc/profile
Run Code Online (Sandbox Code Playgroud)
否。转到下一步。
文件来源是/etc/profile
什么?
grep '[[:space:]]\.[[:space:]]' /etc/profile
Run Code Online (Sandbox Code Playgroud)
我有$i
(需要查看此来源的来源,但在这种情况下,它是文件(/etc/profile.d/*.sh
如果有)(并且如果可读)和/etc/bash.bashrc
. 在/etc/bash.bashrc
.
quote
的/etc/bash.bashrc
?是/否,等等...