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

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

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

test=`echo [asdf]`

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

答案1

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

毕竟:

    $ test="$(printf '%s' '[asdf]')"
    $ printf "%s\n" "$test"
    [asdf]

答案2

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

test=$(echo \[asdf])

相关内容