如何处理 bash 脚本中的括号等特殊字符?

tes*_*est 5 shell quoting

我正在尝试获取某些程序的输出并将它们分配给变量。我正在使用反引号来做到这一点,但如有必要,我可以切换到不同的方法。我注意到的是,我经常没有在变量中得到预期的输出。下面是一个简单的案例。我的实际例子更复杂。无论我在反引号中运行的程序的输出是什么,我都希望它在变量中。那可能吗?

test=`echo [asdf]`
Run Code Online (Sandbox Code Playgroud)

如果我echo $test只显示一个。

jim*_*mij 12

  1. 不要使用反引号,使用$().
  2. 在文字字符串周围使用单引号,在变量周围使用双引号,因此echo "$test".
  3. 不要用echo,用printf

毕竟:

    $ test="$(printf '%s' '[asdf]')"
    $ printf "%s\n" "$test"
    [asdf]
Run Code Online (Sandbox Code Playgroud)


che*_*ner 7

最简单的答案是转义 ,[这样它就不会被视为特殊的模式字符。(]如果前面没有未加引号的 ,则按字面意思处理[。)

test=$(echo \[asdf])
Run Code Online (Sandbox Code Playgroud)