Ich habe eine Variable, die ich wie folgt aufbaue:
ATTSTR=""
for file in $LOCALDIR/*.pdf
do
ATTSTR="${ATTSTR} -a \"${file}\""
done
Die Variable enthält jetzt (beachten Sie die Leerzeichen im Dateinamen):
ATTSTR=' -a "/tmp/Testpage - PDFCreator.pdf"'
Und jetzt möchte ich diese Variable in einem Befehl wie diesem verwenden:
mutt -s "Subject" "${ATTSTR}" [email protected]
Es stellt sich jedoch heraus, dass es folgendermaßen erweitert wird und der Befehl daher fehlschlägt (beachten Sie die hinzugefügten einfachen Anführungszeichen, die die erweiterte Variable umgeben):
mutt -s "Subject" ' -a "/tmp/Testpage - PDFCreator.pdf"' [email protected]
Ich möchte, dass meine Variable ohne einfache Anführungszeichen erweitert wird. Die Verwendung von „ "$ATTSTR"
oder“ $ATTSTR
ist einfach noch schlimmer. Wie kann ich das erreichen?
Antwort1
Dateinamen in erweiterten Zeichenfolgen sind notorisch unzuverlässig; widerstehen Sie dieser Versuchung.
Verwenden Sie stattdessen einAnordnungum die Dateinamen unabhängig von Leerzeichen intakt zu halten:
arr=()
for f in $somedir/*.pdf
do
arr+=( -a "$f")
done
# and for usage/display:
mutt -s mysubject "${a[@]}" some@body
Sehen Sie sich dieBash-Handbuch zu Arraysals Referenz.
Antwort2
Verwenden Sie die Eval-Funktion
command="mutt -s \"Subject\" $ATTSTR [email protected]"
response=$(eval "$command")