cudzysłów cytowany w zmiennej traktowanej inaczej po rozwinięciu do polecenia
Wyjaśnienie pytania poprzez przykłady ...
Demonstruje, że pojedyncze cudzysłowy po opcji --chapters są usuwane, gdy zmienna jest rozwijana (nie spodziewałem się tego):
prompt@ubuntu:/my/scripts$ cat test1.sh
#!/bin/bash
actions="--tags all:"
actions+=" --chapters ''"
mkvpropedit "$1" $actions
prompt@ubuntu:/my/scripts$ ./test1.sh some.mkv
Error: Could not open '''' for reading.
A teraz z jakiegoś powodu mkvpropedit otrzymuje podwójne cudzysłowy jako część nazwy pliku (ja też tego nie oczekiwałem):
prompt@ubuntu:/my/scripts$ cat test1x.sh
#!/bin/bash
command="mkvpropedit \"$1\""
command+=" --tags all:"
command+=" --chapters ''"
echo "$command"
$command
prompt@ubuntu:/my/scripts$ ./test1x.sh some.mkv
mkvpropedit "some.mkv" --tags all: --chapters ''
Error: Could not open '''' for reading.
Powyższe polecenie echa wydaje się być poprawne. Umieszczenie tego samego tekstu w innym skrypcie daje oczekiwany rezultat:
prompt@ubuntu:/my/scripts$ cat test2.sh
#!/bin/bash
mkvpropedit "$1" --tags all: --chapters ''
prompt@ubuntu:/my/scripts$ ./test2.sh some.mkv
The file is being analyzed.
The changes are written to the file.
Done.
Czy ktoś mógłby wyjaśnić, dlaczego cytaty nie zachowują się zgodnie z oczekiwaniami. Uważam, że szukanie tego problemu jest trudne, ponieważ w sieci jest tak wiele innych cytatów. Nie wiedziałbym nawet, jak wyjaśnić pytanie bez przykładów.
Obawiam się, że pewnego dnia nazwa pliku w argumencie zawiera jakiś znak, który łamie wszystko, stąd może nadmierne cytowanie. Nie rozumiem, dlaczego to samo polecenie wykonuje się inaczej, gdy jest wpisywane bezpośrednio w skrypcie lub gdy jest dostarczane za pomocą zmiennej. Proszę, oświeć mnie.
Dziękuje za przeczytanie.