Nie mogę wydać pustego JSON, {}
aby echo, jeśli brakuje envvara. Mam ciąg końcowy }
w danych wyjściowych, jeśli jest ustawiony, lub wyświetla się znaki specjalne .
bash-3.2$ unset X
bash-3.2$ echo "${X:-{}}"
{}
bash-3.2$ X=y
bash-3.2$ echo "${X:-{}}"
y}
bash-3.2$ echo "${X:-{\}}"
y
bash-3.2$ unset X
bash-3.2$ echo "${X:-{\}}"
{\}
bash-3.2$ echo "${X:-'{}'}"
'{}'
bash-3.2$ X=z
bash-3.2$ echo "${X:-'{}'}"
z
Jak poprawnie go uciec?
echo "${X:-{\}}"
działało dobrze.Odpowiedzi:
Podaj swoje szelki:
Wewnętrzne podwójne wymagane są tu cytaty, które wygląda śmiesznie, ale jest składniowo porządku.
Pojedyncze cytaty nie będą działać i nie jestem całkowicie pewien, dlaczego nie. To prawdziwe zagnieżdżone cytowanie, a nie koniec i wznowienie, które można zweryfikować, wstawiając spacje. Double będzie jednak działać dobrze.
źródło
word
poniższe:-
cytaty muszą być wyraźnie cytowane, więc"${X:-'{}'}"
dosłownie${X:-'{}
następuje'}
. Dlaczego specyfikacja jest tak specyficzna, nie jest dla mnie jasne.Możesz oszukiwać i ustawiać zmienną jako pusty wynik i unikać problemów z cytowaniem
źródło
Często używam wartości szesnastkowych znaków poprzez
printf
:Nieco gadatliwy, ale działa bez nadmiernego stresowania się cytatami.
źródło