Bekijk dit codevoorbeeld eens:
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
Voor voorbeeld, de terminaluitvoer van $./new.sh q w e r t y u i o p
zal zijn:
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
En de uitvoer van $./new.sh q w e r t y u i o
zal zijn:
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.
Vraag : Wat betekent de -n
?
Reacties
Antwoord
[
is een andere naam voor de test
ingebouwde, bekijk hier en hier , ook dit .
Die reeks van if
verklaringen zouden waarschijnlijk beter af zijn als een lus. In Bash zouden we indirecte uitbreiding kunnen gebruiken:
for ((i=1 ; i <= 10 ; i++)) ; do if [ -n "${!i}" ] ; then echo "${!i}" fi done
Het meest gebruikelijke idioom zou waarschijnlijk zijn om shift
op elke iteratie, maar het vernietigt de lijst met argumenten.
Eveneens citeren: hier $0
staat buiten de aanhalingstekens. In de meeste gevallen is het handiger om alle uitbreidingen van variabelen tussen aanhalingstekens te houden, tenzij u expliciet woordsplitsing en bestandsnaamuitbreiding wilt.
echo "Name of this script: "$0""
Schrijf dus liever:
echo "Name of this script: $0"
Reacties
- Je kunt
shift
binnen een functie gebruiken en de argumentenlijst van de aanroeper ' niet beïnvloeden, hoewel het gebruik van een functie alleen daarvoor een beetje is hackish.
help test
gelezen?[
en-n
vreselijk zijn om naar te zoeken.bash -n myscript
doet, wordt er een syntaxscontrole op het script in plaats van het uit te voeren.