Zagnieżdżone cytaty w podpowłokach


13

Powiedzmy, że muszę użyć cudzysłowów do enkapsulacji danych wyjściowych podpowłoki, takich jak:

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

Ale muszę zagnieżdżać tego rodzaju rzeczy, takie jak:

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

Nie mogę używać pojedynczych cudzysłowów, ponieważ nie rozszerzają one zawartych w nich zmiennych. Wycofywanie cytatów nie działa, ponieważ są one traktowane jako tekst pasywny.

Jak sobie z tym poradzić?


Dlaczego nie używasz DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"?
cuonglm

Odpowiedzi:


19

Nie musisz uciekać przed cudzysłowami wewnątrz podpowłoki, ponieważ bieżąca powłoka ich nie interpretuje (właściwie nie interpretuje niczego od $(do )), a podpowłoka nie wie o żadnych cytatach powyżej.

Cytowanie podpowłoki przy przypisywaniu zmiennych również nie jest konieczne, aby uzyskać więcej informacji, zobacz man bash.


1
To zależy od tego, co próbujesz zrobić, ale zwykle jest to najlepsza praktyka. Zobacz github.com/koalaman/shellcheck/wiki/Sc2086
LPCRoy

8

Nie musisz uciekać przed zagnieżdżonymi cudzysłowami. Zaskakujące są poprawnie parsowane!

DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.