19.6. Brak cudzysłowów w operacjach przypisania wywołuje błędy „command not found”

Problem

Przygotowany skrypt przypisuje pewne wartości zmiennej, ale podczas wykonywania kodu na ekranie jest wyświetlany komunikat command not found.

$ cat błąd1.sh
#!/bin/bash -
# typowy błąd:
# X=$Y $Z
# to nie to samo co:
# X="$X $Z"
#
OPT1=-l
OPT2=-h
ALLOPT=$OPT1 $OPT2
ls $ALLOPT .
$
$ ./błąd1.sh
./błąd1.sh: line 9: -h: command not found
błąd1.sh  drugi.sh  pierwszy.sh
$

Rozwiązanie

Wyrażenie zapisane po prawej stronie operatora przypisania (w instrukcji przypisania wartości zmiennej $ALLOPT) musi być otoczone znakami cudzysłowu. Polecenie zapisane jako:

ALLOPT=$OPT1 $OPT2

musi zostać zastąpione kodem:

ALLOPT="$OPT1 OPT2"

Analiza

Przyczyną powstałego problemu jest znak ...

Get Bash. Receptury now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.