Kurze Antwort: Siehe BashFAQ # 50 ("Ich versuche, einen Befehl in eine Variable zu schreiben , aber die komplexen Fälle schlagen immer fehl!").
Lange Antwort: Das Einfügen von Befehlen (oder Teilen von Befehlen) in Variablen und die anschließende Wiederherstellung ist kompliziert. Wenn die Shell eine Variable in der Befehlszeile erweitert und die Variable in Anführungszeichen gesetzt wurde, wird sie nicht analysiert. Wenn es nicht in Anführungszeichen steht, werden Leerzeichen als Argumentumbrüche analysiert, aber Anführungszeichen und Escapezeichen werden nicht analysiert. In beiden Fällen ist es nicht sinnvoll, Anführungszeichen in den Wert der Variablen einzufügen.
Normalerweise ist die beste Möglichkeit, dies zu tun, die Verwendung eines Arrays anstelle einer einfachen Textvariablen:
echozeigt nicht, was Sie denken, dass es ist. Versuchen Sie herauszufinden printargs() { printf "'%s' " "$@"; echo; }; printargs $FLAGS; printargs "$FLAGS", warum keine dieser Optionen funktioniert.
Antworten:
Kurze Antwort: Siehe BashFAQ # 50 ("Ich versuche, einen Befehl in eine Variable zu schreiben , aber die komplexen Fälle schlagen immer fehl!").
Lange Antwort: Das Einfügen von Befehlen (oder Teilen von Befehlen) in Variablen und die anschließende Wiederherstellung ist kompliziert. Wenn die Shell eine Variable in der Befehlszeile erweitert und die Variable in Anführungszeichen gesetzt wurde, wird sie nicht analysiert. Wenn es nicht in Anführungszeichen steht, werden Leerzeichen als Argumentumbrüche analysiert, aber Anführungszeichen und Escapezeichen werden nicht analysiert. In beiden Fällen ist es nicht sinnvoll, Anführungszeichen in den Wert der Variablen einzufügen.
Normalerweise ist die beste Möglichkeit, dies zu tun, die Verwendung eines Arrays anstelle einer einfachen Textvariablen:
quelle
eval ist eine andere Option:
Siehe auch:
quelle
Ich sehe das Problem nicht:
Möglicherweise müssen Sie den Wert noch einmal zitieren:
quelle
echo
zeigt nicht, was Sie denken, dass es ist. Versuchen Sie herauszufindenprintargs() { printf "'%s' " "$@"; echo; }; printargs $FLAGS; printargs "$FLAGS"
, warum keine dieser Optionen funktioniert.