/ / Literalne cytaty w flagach dla polecenia w skrypcie bash - bash, shell, escaping, quotes

Literalne cytaty w flagach dla polecenia w skrypcie bash - bash, shell, escaping, quotes

Piszę skrypt Basha, w którym uruchamiam skrypt perla, który wymaga flag z podwójnymi cudzysłowami. Uruchamianie skryptu normalnie, uruchamiasz

$ perl script.pl -flag="something" -anotherflag="somethingelse"

W moim skrypcie używam zmiennych w tych flagach, ale chciałbym zachować podwójne cytaty, więc mam coś takiego:

variable=foo
perl script.pl -flag="something" -anotherflag="$variable"

kiedy biegnę bash -x myscript.sh, Widzę to dodaje pojedyncze cudzysłowy wokół całej flagi, zachowując podwójne cytaty, powodując błąd skryptu perla:

perl script.pl "-flag="something"" "-anotherflag="foo""

Próbowałem też evalcałość (eval perl [...]), i całkowicie rozebrał podwójne cytaty. Jak mogę uruchomić Bash ze skryptem z nienaruszonymi podwójnymi cytatami?

Odpowiedzi:

0 dla odpowiedzi № 1

Mówisz...:

Normalnie uruchamiasz skrypt biegać

$ perl script.pl -flag = "coś" -anotherflag = "somethingelse"

... ale potem powłoka działająca na $ monit usunie ": skrypt perla nigdy ich nie zobaczy (po prostuodegrali swoją rolę w zapobieganiu interpretacji w nich przestrzeni i znaków specjalnych, takich jak „>”, „<”, ”| itp. - te spacje i / lub znaki specjalne byłyby po prostu przekazywane jako część arg ) Przy tych wartościach, które podajesz (bez spacji, bez specjalności), te podwójne cudzysłowy są całkowicie bezużyteczne i pominięcie ich nie miałoby żadnej różnicy.

W każdym razie, jeśli jest to rzeczywiście efekt, który chcesz, po prostu zrób to w swoim skrypcie bash:

perl script.pl -flag="something" -anotherflag="$variable"

(lub pomiń podwójne cudzysłowy - jest całkowicie obojętny something, obojętny wokół $variable jeśli tak, jak w twoim przykładzie, to po prostu foo ale nie we wszystkich przypadkach).