Spójrz na ten przykładowy kod:
MIN=10 if [ -n "$1" ]; then echo "$1"; fi if [ -n "$2" ]; then echo "$2"; fi if [ -n "$3" ]; then echo "$3"; fi if [ -n "$4" ]; then echo "$4"; fi if [ -n "$5" ]; then echo "$5"; fi if [ -n "$6" ]; then echo "$6"; fi if [ -n "$7" ]; then echo "$7"; fi if [ -n "$8" ]; then echo "$8"; fi if [ -n "$9" ]; then echo "$9"; fi if [ -n "${10}" ]; then echo "${10}"; fi echo "List of arguments: "$*"" echo "Name of this script: "$0"" if [ $# -lt "$MIN" ]; then echo "Not enough arguments, need $MIN to run."; fi
Dla na przykład wyjście terminala $./new.sh q w e r t y u i o p
będzie wyglądać następująco:
q w e r t y u i o p List of arguments: q w e r t y u i o p Name of this script: ./new.sh
A wyjście $./new.sh q w e r t y u i o
będzie:
q w e r t y u i o List of arguments: q w e r t y u i o Name of this script: ./new.sh Not enough arguments, need 10 to run.
Pytanie : Co oznacza -n
?
Komentarze
Odpowiedź
[
to inna nazwa wbudowanego test
, patrz tutaj i tutaj , również to .
Ta sekwencja if
instrukcje byłyby prawdopodobnie lepsze jako pętla. W Bashu moglibyśmy użyć rozwinięcia pośredniego:
for ((i=1 ; i <= 10 ; i++)) ; do if [ -n "${!i}" ] ; then echo "${!i}" fi done
Najczęstszym idiomem byłoby prawdopodobnie użycie shift
na każdym iteracja, ale niszczy listę argumentów.
Również cytowanie: tutaj $0
jest poza cudzysłowami. W większości przypadków bardziej przydatne jest trzymanie wszystkich rozwinięć zmiennych w cudzysłowach, chyba że wyraźnie chcesz dzielenie słów i rozwijanie nazw plików.
echo "Name of this script: "$0""
Więc raczej napisz:
echo "Name of this script: $0"
Komentarze
- Możesz użyć
shift
wewnątrz funkcji i nie wpływać na listę argumentów wywołującego ', chociaż użycie funkcji tylko do tego jest oczywiście trochę hackish.
help test
?[
i-n
są okropne w wyszukiwaniu.bash -n myscript
, wykonuje kontrolę składni w skrypcie zamiast go uruchamiać.