Bash ruft Bash mit Parametern umschlossen mit Gänsefüßen

takidoso

Erfahrenes Mitglied
Hallo und Halli,
Ich habe folgende Situation/Problem

ein Bash-Programm bekommt wie normal Parameter beim Aufruf mit. Es kann ja aber sein, dass ein Parameter mit Gänsefüßen maksiert wurde um in ihm existierende Blanks nicht ungewollt in mehr als einen Parameter erschienen zu lassen.

innerhalb dieses Bash-programms wird nun ein anderes Bash-Programm aufgerufen, in dem der größte Teil der Parameter weitergegeben wird.
Und nun kommts: wie kann sicher gestellt werden, dass ein solcher Parameter der von dem aufrufenden Bash-Programm noch als einer erkannt worden ist in der Parameterliste für das aufzurufende Script mitgegeben werden, so dass dieses ebenfalls einen Parameter daraus sieht.

Meine Versuche bisher liefen immer darauf raus, dass das aufgerufende Programm den einen Parameter als 2 Parameter ansah sobald ein Blank drin war.

Hier der Beispielcode aufrufendes Bashprogramm

Code:
#!/bin/bash
echo $#
sourcefile=$1
myecho $*
myecho $@
echo
myecho $*
myecho $@
echo
echo shift
shift
echo
myecho $*
myecho $@
echo
myecho $*
myecho $@

echo
echo $sourcefile

Aufgerufendes Bash-programm myecho
Code:
#!/bin/bash
echo -n "$#  : "
while [[ ! -z "$1" ]]
do
  echo -n  "\"$1\" "
  shift
done
echo

hier die Ausgabe wenn die Eingabe "lala gaga" dumdum ist
Code:
2
3  : "lala" "gaga" "dumdum"
3  : "lala" "gaga" "dumdum"

3  : "lala" "gaga" "dumdum"
3  : "lala" "gaga" "dumdum"

shift

1  : "dumdum"
1  : "dumdum"

1  : "dumdum"
1  : "dumdum"

lala gaga

Ich vermute mal ich begehe da irgendwo einen Gedankenfehler
ich habe da noch einen anderen Aufruf versucht mittels folgendem Bash-Programm
Code:
#!/bin/bash

while [[ ! -z "$1" ]]
do
  argStr=$argStr \"$1\"
  shift
done

echo $argStr
myecho $argStr

bekomme dann diese Ausgabe (irgendwie werden meine Parameter als Befehle verstanden :-()
Code:
./test2.sh: line 5: "lala: command not found
./test2.sh: line 5: "dumdum": command not found

Bei dem Aufruf mit trace sehe ich dann folgendes
Code:
bash -x test2.sh "lala gaga" dumdum
+ [[ ! -z lala gaga ]]
+ argStr=
+ '"lala' 'gaga"'
test2.sh: line 5: "lala: command not found
+ shift
+ [[ ! -z dumdum ]]
+ argStr=
+ '"dumdum"'
test2.sh: line 5: "dumdum": command not found
+ shift
+ [[ ! -z '' ]]
+ echo

+ myecho
0  :

------------ Nachtrag -----------------------
habe den Fehler mit der Befehlsinterpretation gefunden und bekomme folgendes nun
geändertes aufgerufenes Programm (Gänsefüße fehlten da noch
Code:
#!/bin/bash

while [[ ! -z "$1" ]]
do
  argStr="$argStr \'$1\'"
  shift
done

echo $argStr
myecho $argStr

resultat:
Code:
test2.sh "lala gaga" dumdum
\'lala gaga\' \'dumdum\'
3  : "\'lala" "gaga\'" "\'dumdum\'"
sieht so aus als ob er meine Maskierung der einfachen Anführungszeichen anders als erwartet interpretiert.

wie muss das richtig heißen?
 
Zuletzt bearbeitet:
Zurück