子外壳中的嵌套引号


13

说我必须使用引号来封装subshel​​l输出,例如:

DATA="$(cat file.hex | xxd -r)"

但是我需要嵌套这样的东西:

DATA="$(cat file.hex | xxd -r | tr -d \"$(cat trim.txt)\")"

我不能使用单引号,因为它们不会展开其中的变量。转义引号不起作用,因为它们仅被视为被动文本。

我该如何处理?


你为什么不使用DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"
cuonglm

Answers:


19

您不需要在子外壳中转义引号,因为当前的外壳不解释它们(实际上,它不解释从$(到的任何内容)),并且子外壳也不知道上面的任何引号。

也不必在变量分配处引用子外壳,有关更多信息,请参见man bash


1
这取决于您要尝试执行的操作,但这通常是最佳做法。见github.com/koalaman/shellcheck/wiki/Sc2086
LPCRoy15年

8

您无需在其中转义嵌套的引号。他们得到正确解析,令人惊讶!

DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.