Ik heb een bash-script gemaakt dat zichzelf recursief aanroept.
Het roept zichzelf weer aan met een door "shift" 1 ingekorte parameter lijst.
hieronder een (ingekort) voorbeeld van het programma.
Het probleem is dat (bestands)namen met spaties door $* worden opgevat als losse elementen.
bijvoorbeeld:
zelfs dit werkt niet:
Mijn vraag is dus of iemand weet of dit normaal is. Of dat ik wat over het hoofd zie.
Of dat je $* helemaal niet voor namen met spaties kunt gebruiken.
("$*" plakt alle argumenten aan elkaar als 1 lange string, dus dat gaat ook niet
)
P.S. Ik weet inmiddels wel dat het zo wel werkt:
Het roept zichzelf weer aan met een door "shift" 1 ingekorte parameter lijst.
hieronder een (ingekort) voorbeeld van het programma.
code:
1
2
3
4
5
6
7
8
9
10
11
| #!/bin/bash
MINARGS=1
! [ $# -lt $MINARGS ] || exit 65 # 1 of meer argumenten vereist
if [ $# -eq $MINARGS ]; then #als er nog 1 parameter is
echo "$1"
else
echo "$1" #eerste keer hier goed omdat ik hiervoor geen $* gebruik
shift #argumenten lijst naar links doorschuiven
$0 $* #recursive call <- Hiermee gaan lange namen verloren
fi |
Het probleem is dat (bestands)namen met spaties door $* worden opgevat als losse elementen.
bijvoorbeeld:
code:
1
2
3
4
5
6
7
8
9
| [A_L@localhost:~]$ testprogramma "1 2 3" "Lange Bestands naam" "4 5 6" 1 2 3 Lange Bestands naam 4 5 6 [A_L@localhost:~]$ |
zelfs dit werkt niet:
code:
1
2
3
4
| for archive in $*
do
echo "$archive"
done |
Mijn vraag is dus of iemand weet of dit normaal is. Of dat ik wat over het hoofd zie.
Of dat je $* helemaal niet voor namen met spaties kunt gebruiken.
("$*" plakt alle argumenten aan elkaar als 1 lange string, dus dat gaat ook niet
P.S. Ik weet inmiddels wel dat het zo wel werkt:
code:
1
2
3
4
5
| until [ -z "$1" ] # Until all parameters used up...
do
echo "$1"
shift
done |