Pytania otagowane jako variable

Zmienna to nazwa, jeśli prawidłowo wybrana z symbolicznym znaczeniem, która zawiera wartość lub wartości. Użyj tego znacznika, jeśli twoje pytanie dotyczy użycia zmiennych w skryptach powłoki (jeśli chcesz zapytać o zmienne w językach programowania, prawdopodobnie powinieneś zapytać na StackOverflow)

2
Jak wstawić zmienne do ciągu zawierającego „”?
Chcę zbudować ciąg xml wstawiając zmienne: str1="Hello" str2="world" xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>' echo $xml Wynik powinien być <?xml version="1.0" encoding="iso-8859-1"?><tag1>Hello</tag1><tag2>world</tag2> Ale dostaję: <?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2> Też próbowałem xml="<?xml version="1.0" encoding="iso-8859-1"?><tag1>$str1</tag1><tag2>$str2</tag2>" Ale to usuwa wewnętrzne podwójne cudzysłowy i daje: <?xml version=1.0 encoding=iso-8859-1?><tag1>hello</tag1><tag2>world</tag2>
25 bash  shell  variable  xml 





3
Jak mogę rozwinąć cytowaną zmienną do zera, jeśli jest pusta?
Powiedzmy, że mam skrypt wykonujący: some-command "$var1" "$var2" ... A w przypadku var1pustego wolałbym, aby zamiast pustego łańcucha zastąpić go niczym, aby polecenie zostało wykonane: some-command "$var2" ... i nie: some-command '' "$var2" ... Czy istnieje prostszy sposób niż testowanie zmiennej i warunkowe włączenie jej? if [ -n "$1" ]; …

2
Ustawienie zmiennej powłoki w zerowy sposób łączący
Naprawdę lubię „zerowanie koalescencyjne”, w którym można ustawić zmienną na pierwszą wartość „inną niż null” na liście rzeczy. Obsługuje to wiele języków, na przykład: DO#: String myStr = string1 ?? string2 ?? "default"; JavaScript: var myStr = string1 || string2 || "default"; ...itp. Jestem tylko ciekawy, czy można to zrobić …
20 bash  shell  variable 

4
dirname i basename vs interpretacja parametrów
Czy istnieje obiektywny powód, aby preferować jedną formę od drugiej? Wydajność, niezawodność, przenośność? filename=/some/long/path/to/a_file parentdir_v1="${filename%/*}" parentdir_v2="$(dirname "$filename")" basename_v1="${filename##*/}" basename_v2="$(basename "$filename")" echo "$parentdir_v1" echo "$parentdir_v2" echo "$basename_v1" echo "$basename_v2" Produkuje: /some/long/path/to /some/long/path/to a_file a_file (v1 używa rozszerzenia parametrów powłoki, v2 używa zewnętrznych plików binarnych.)

4
Usuń zmienną, aby użyć jej jako treści innego skryptu
To pytanie nie dotyczy tego, jak napisać poprawnie literał łańcucha znaków. Nie mogłem znaleźć żadnego powiązanego pytania, które nie dotyczyłoby ucieczki przed zmiennymi w celu bezpośredniego wykorzystania w skrypcie lub przez inne programy. Moim celem jest umożliwienie skryptowi generowania innych skryptów. Wynika to z faktu, że zadania w wygenerowanych skryptach …


5
Rura przypisuje zmienną
Dla uproszczenia chciałbym zrobić: echo cart | assign spo; echo $spo Wyjście: koszyk Czy taka assignaplikacja istnieje? Jestem świadomy wszystkich sposobów, aby to zrobić za pomocą substytucji.
19 bash  variable 

3
Używanie zmiennych powłoki dla opcji poleceń
W skrypcie Bash próbuję zapisać opcje, których używam, rsyncw osobnej zmiennej. Działa to dobrze w przypadku prostych opcji (np. --recursive), Ale mam problemy z --exclude='.*': $ find source source source/.bar source/foo $ rsync -rnv --exclude='.*' source/ dest sending incremental file list foo sent 57 bytes received 19 bytes 152.00 bytes/sec …
19 bash  variable 

1
Dlaczego $ {$ #} zwraca ten sam wynik co $$ w powłoce?
Starając się uzyskać ostatniego pozycyjny zestaw parametrów w /bin/dash, próbowałem echo ${$#}. Nieoczekiwanie nie spowodowało to błędu, ale PID, który jest taki sam jak $$zmienna zawartość. Pytanie, dlaczego ta składnia działała? Jaką zasadę składni zastosowała tutaj powłoka? Zasadniczo to, co zrobiłem $ set 1 2 3 4 5 $ echo …
18 shell  variable 

3
Dlaczego opcje w cytowanej zmiennej zawodzą, ale działają, gdy nie są cytowane?
Czytałem o tym, że powinienem zacytować zmienne w bash, np. „$ Foo” zamiast $ foo. Jednak podczas pisania skryptu znalazłem przypadek, w którym działa on bez cudzysłowów, ale nie z nimi: wget_options='--mirror --no-host-directories' local_root="$1" # ./testdir recieved from command line remote_root="$2" # ftp://XXX recieved from command line relative_path="$3" # /XXX …

6
Czy zmienne powinny być cytowane podczas wykonywania?
Ogólna zasada w skryptach powłoki polega na tym, że zmienne powinny być zawsze cytowane, chyba że istnieje ważny powód, aby tego nie robić. Aby uzyskać więcej informacji, niż prawdopodobnie chcesz wiedzieć, spójrz na to świetne pytanie i odpowiedzi: Implikacje bezpieczeństwa związane z zapominaniem o cytowaniu zmiennej w powłokach bash / …

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.