Вложенные кавычки в подоболочках

13

Скажем, я должен использовать кавычки для инкапсуляции вывода subshell, например:

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

Но мне нужно вложить такие вещи, как:

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

Я не могу использовать одинарные кавычки, потому что они не раскрывают переменные внутри них. Экранирование кавычек не работает, потому что они рассматриваются как пассивный текст.

Как мне справиться с этим?

MELAB
источник
Почему ты не используешь DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"?
cuonglm

Ответы:

19

Вам не нужно экранировать кавычки внутри подоболочки, так как текущая оболочка не интерпретирует их ( $(на )самом деле ничего не интерпретирует с по к ), и подоболочка не знает ни о каких приведенных выше кавычках.

Цитировать подоболочку при назначении переменной тоже не нужно, для получения дополнительной информации см man bash.

MichalH
источник
1
Это зависит от того, что вы пытаетесь сделать, но обычно это лучшая практика. См github.com/koalaman/shellcheck/wiki/Sc2086
LPCRoy
8

Вам не нужно избегать вложенных кавычек внутри. Они разбираются правильно, на удивление!

DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"
wisbucky
источник