gpt4 book ai didi

bash - 为什么 bash "echo [t]"导致 "t"而不是 "[t]"

转载 作者:行者123 更新时间:2023-11-29 08:41:06 24 4
gpt4 key购买 nike

这发生在字符 t 和值 root 上。很困惑

$ echo [s]
[s]
$ echo [t]
t
$ echo [ t ]
[ t ]
$ echo [root]
t

最佳答案

[] 表示一个字符类,您的当前目录中有一个名为 t 的文件。

下面应该进一步解释:

$ ls
$ echo [t]
[t]
$ touch t
$ echo [t]
t
$ echo [root]
t
$ touch r
$ echo [root]
r t

如果你想在 [] 中回显某些内容,请转义 [:

echo \[$var]

现在观察区别:

$ echo \[root]
[root]

或者,作为 Glenn Jackman指出,引用它:

$ echo '[root]'
[root]
$ echo "[root]"
[root]

Shell Command Language根据上下文告诉 shell 以下字符是特殊的:

*   ?   [   #   ~   =   %

此外,如果要代表自己,则必须引用以下字符:

|  &  ;  <  >  (  )  $  `  \  "  '  <space>  <tab>  <newline>

如果不引用参数,您还可以使用 printf确定给定输入中的哪些字符需要转义。对于您的示例,即 [s]:

$ printf "%q" "[s]"
\[s\]

另一个例子:

$ printf "%q" "[0-9]|[a-z]|.*?$|1<2>3|(foo)"
\[0-9\]\|\[a-z\]\|.\*\?\$\|1\<2\>3\|\(foo\)

关于bash - 为什么 bash "echo [t]"导致 "t"而不是 "[t]",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23140501/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com