it-swarm.com.de

Wie verwende ich Variablen in Strings mit einfachen Anführungszeichen?

Ich frage mich nur, wie ich eine Variable in einfache Anführungszeichen setzen kann (ich verwende einfache Anführungszeichen, da die Zeichenfolge Anführungszeichen enthält).

     echo 'test text "here_is_some_test_text_$counter" "output"' >> ${FILE}

jede Hilfe wäre sehr dankbar

19

Variablen werden in Strings mit doppelten Anführungszeichen erweitert, jedoch nicht in Strings mit einfachen Anführungszeichen:

 $ name=World

 $ echo "Hello $name"
 Hello World

 $ echo 'Hello $name'
 Hello $name

Wenn Sie einfach die Anführungszeichen wechseln können, tun Sie dies.

Wenn Sie es vorziehen, bei einfachen Anführungszeichen zu bleiben, um zusätzliche Flucht zu vermeiden, können Sie Anführungszeichen stattdessen in demselben Argument mischen und zuordnen:

 $ echo 'single quoted. '"Double quoted. "'Single quoted again.'
 single quoted. Double quoted. Single quoted again.

 $ echo '"$name" has the value '"$name"
 "$name" has the value World

Auf Ihren Fall angewendet:

 echo 'test text "here_is_some_test_text_'"$counter"'" "output"' >> "$FILE"

verwenden Sie printf:

printf 'test text "here_is_some_test_text_%s" "output"\n' "$counter" >> ${FILE}
7
glenn jackman

Verwenden Sie ein Heredoc:

cat << EOF >> ${FILE}
test text "here_is_some_test_text_$counter" "output"
EOF
4
William Pursell

Die am besten lesbare, funktionale Methode verwendet geschweifte Klammern in Anführungszeichen.

'test text "here_is_some_test_text_'"${counter}"'" "output"' >> "${FILE}"
2
Paul Back

Eine Variable mit einfachen Anführungszeichen ausgeben:

printf "'"'Hello %s'"'" world
0
Elior Malul

Sie können es so machen:

$ counter=1 eval echo `echo 'test text \
   "here_is_some_test_text_$counter" "output"' | \
   sed -s 's/\"/\\\\"/g'` > file

cat file
test text "here_is_some_test_text_1" "output"

Erklärung : Der Eval-Befehl verarbeitet eine Zeichenfolge als Befehl, so dass nach dem korrekten Escape-Befehl das gewünschte Ergebnis erzielt wird.

Es heißt, dass die folgende Zeichenfolge als Befehl ausgeführt wird:

'echo test text \"here_is_some_test_text_$counter\" \"output\"'

Befehl noch einmal in einer Zeile:

counter=1 eval echo `echo 'test text "here_is_some_test_text_$counter" "output"' | sed -s 's/\"/\\\\"/g'` > file
0
Kulimak Joco