"system"-Befehl in Bash (Autoquote eines Arrays)

03/06/2009 - 09:58 von Manuel Reimer | Report spam
Hallo,

nehmen wir an, ich hàtte ein Bash-Array, dessen erstes Element der Pfad
zum Programm ist. Alle folgenden Elemente sind Parameter, die genau so
an das Programm gehen sollen. Und zwar ganz unabhàngig davon, ob quotes,
Leerzeichen oder wasweißich im String sind.

Beispiel:
#!/bin/bash
declare -a TESTARR=()
TESTARR[0]="/usr/bin/testcommand"
TESTARR[1]="dies ist '' ein Test"
TESTARR[2]="ein String mit \"Quotes\""
echo "${TESTARR[@]}"

Ist:
/usr/bin/testcommand dies ist ein Test ein String mit "Quotes"

Soll:
/usr/bin/testcommand 'dies ist \'\' ein Test' 'ein String mit "Quotes"'

Wie wàre sowas am elegantesten lösbar?

Danke im Voraus

CU

Manuel

www.jetzt-abwaehlen.de Wàhlen gehen 2009! Ein Aufruf etwas zu àndern.
Der Mensch erfand Maschinen, um sich damit die Arbeit zu erleichtern.
Nur leider hat er vergessen, rechtzeitig damit aufzuhören...
Beitràge mit *X-No-Html Header* kann ich weder lesen, noch beantworten!
 

Lesen sie die antworten

#1 Heike C. Zimmerer
03/06/2009 - 10:46 | Warnen spam
Manuel Reimer writes:

Hallo,

nehmen wir an, ich hàtte ein Bash-Array, dessen erstes Element der
Pfad zum Programm ist. Alle folgenden Elemente sind Parameter, die
genau so an das Programm gehen sollen. Und zwar ganz unabhàngig davon,
ob quotes, Leerzeichen oder wasweißich im String sind.

Beispiel:
#!/bin/bash
declare -a TESTARR=()
TESTARR[0]="/usr/bin/testcommand"
TESTARR[1]="dies ist '' ein Test"
TESTARR[2]="ein String mit \"Quotes\""
echo "${TESTARR[@]}"



Genau so geht das. Und um das Kommando mit den 2 unverànderten
Parametern auszuführen, schreibst Du

"${TESTARR[@]}"

Ist:
/usr/bin/testcommand dies ist ein Test ein String mit "Quotes"



Ich bekomme hier stattdessen:

/usr/bin/testcommand dies ist '' ein Test ein String mit "Quotes"

was das richtige Ergebnis ist, denn

echo "/usr/bin/testcommand" "dies ist '' ein Test" "ein String mit \"Quotes\""

schreibt dasselbe.

Gruß,

Heike

Ähnliche fragen