Ich bin interessant beim Aufruf einer Funktion mit dynamisch generierten Argumenten in einem Bash-Skript.Übergabe von Argumenten mit Leerzeichen über eine Liste in bash
Wenn jedoch einige der Argumente Leerzeichen hatten, scheint es nicht zu funktionieren.
Lassen Sie uns dieses Testskript haben:
#!/bin/bash
# file uu.sh
[[ -z $1 ]] || echo '$1' $1
[[ -z $2 ]] || echo '$2' $2
[[ -z $3 ]] || echo '$3' $3
[[ -z $4 ]] || echo '$4' $4
[[ -z $5 ]] || echo '$5' $5
[[ -z $6 ]] || echo '$6' $6
[[ -z $7 ]] || echo '$7' $7
[[ -z $8 ]] || echo '$8' $8
[[ -z $9 ]] || echo '$9' $9
[[ -z $0 ]] || echo '$0' $0
Jede mein Skript:
#!/bin/bash
# file vv.sh
ARR=(-x)
ARR+=($1)
ARR+=("$1")
ARR+=("'$1'")
ARR+=("\"$1\"")
bash uu.sh ${ARR[*]}
echo
bash uu.sh "${ARR[*]}"
Beim Aufruf bash vv.sh "a b"
ich folgendes Ergebnis:
$2 -x
$2 a
$3 b
$4 a
$5 b
$6 'a
$7 b'
$8 "a
$9 b"
$0 uu.sh
$1 -x a b a b 'a b' "a b"
$0 uu.sh
Ich erwarte einen Weg übergeben Sie die Variablen an uu.sh wie das Ergebnis wäre:
$1 -x
$2 a b
$0 uu.sh
(Was ich direkt bash uu.sh -x a\ b
durch den Aufruf bekommen, oder bash uu.sh -x "a b"
oder bash uu.sh -x 'a b'
)
Sie wollen '" $ 1 "' und nicht '$ 1'. Sie könnten auch '$ @' 'für alle Argumente verwenden. – jm666
Das Problem ist nicht in' uu.sh' (und, wie auch immer, ich habe mit den Anführungszeichen getestet, und ich sehe immer noch das gleiche Problem) –