我已经在Google上搜索并尝试了很多东西,但是从来没有任何东西可以和$ {parameter @ operator}一起使用。我发现的只是指向相同文档的更多链接。因此,我认为以实际示例给出正确答案将有助于其理解。

该文档说:



它还说到引用:



所以我的推理是这个(特殊字符$)的输出:

a="To be reused as an input string, \$0 needs to be quoted"
echo ${a@Q}

应该是这样(在“”之间,“\”已删除,因此需要再次引用以用作输入):
To be reused as an input string, \$0 needs to be quoted

但我得到:
bash: ${a@Q}: bad substitution

我尝试了以下几种不同的组合:
${a@q}, "${a@Q}", a='To be reused as an input string, $0 needs to be quoted'

无济于事。

实际上,我尝试使用的任何运算符总是会产生错误的替换错误。这些似乎是bash非常晦涩的特征。我从这篇文章中省略了大约半小时的尝试,每一次尝试都比前一次更加扭曲!

最佳答案

对于那些到达这里以寻找不同扩展运算符信息的人,这里是可用扩展字符及其效果的快速列表。

${varname@Q} 返回一个带有任何特殊字符(例如\n,\t等)转义的 Q 字符串。

例子:

$ foo="one\ntwo\n\tlast"
$ echo "$foo"
one\ntwo\n\tlast

$ echo ${foo@Q}
'one\ntwo\n\tlast'

${varname@E} 返回一个字符串,其中包含所有转义字符 E xpanded(例如\n->换行符)。

例子:
$ foo="one\ntwo\n\tlast"
$ echo "${foo}"
one\ntwo\n\tlast

$ echo "${foo@E}"
one
two
        last

${varname@P} 返回一个字符串,该字符串显示该变量用作 P rompt变量(即PS1,PS2,PS3)时的外观

例子:
$ bar='host: \h'
$ echo ${bar@P}
host: myhost1

(还有更多可用于提示变量的转义序列。请参见bash documentation。)

${varname@A} 返回可用于的字符串。用变量的现有名称,值和declare选项(如果有)来分配变量。

例子:
$ foo="test1"
$ echo ${foo@A}
foo='test1'

$ declare -i foo=10
$ echo "${foo@A}"
declare -i foo='10'

${varname@a} 返回一个字符串,该字符串列出了变量的贡品。

例子:
$ declare -ir foo=10
$ echo ${foo@a}
ir

(可用的声明选项为:-r只读,-i整数,-a数组,-f函数,-x可导出。)

关于Bash:如何使用运算符参数扩展$ {parameter @ operator}?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/40732193/

10-12 14:15