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ż eval
cał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 № 1Mó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).