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ć?
DATA="$(cat file.hex | xxd -r | tr -d "$(cat trim.txt)")"
?Odpowiedzi:
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
.źródło
Nie musisz uciekać przed zagnieżdżonymi cudzysłowami. Zaskakujące są poprawnie parsowane!
źródło