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


13

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

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

Ответы:


19

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

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


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

8

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

DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.