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



## takidoso (10. November 2011)

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


```
#!/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

```
#!/bin/bash
echo -n "$#  : "
while [[ ! -z "$1" ]]
do
  echo -n  "\"$1\" "
  shift
done
echo
```

hier die Ausgabe wenn die Eingabe *"lala gaga" dumdum* ist

```
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

```
#!/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 :-()

```
./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

```
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

```
#!/bin/bash

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

echo $argStr
myecho $argStr
```

resultat:

```
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?


----------

