Je me demande simplement comment faire écho à une variable entre guillemets simples (j'utilise des guillemets simples car la chaîne contient des guillemets).
echo 'test text "here_is_some_test_text_$counter" "output"' >> ${FILE}
toute aide serait grandement appréciée
Les variables sont développées dans des chaînes entre guillemets, mais pas dans des chaînes entre guillemets simples:
$ name=World
$ echo "Hello $name"
Hello World
$ echo 'Hello $name'
Hello $name
Si vous pouvez simplement changer de devis, faites-le.
Si vous préférez utiliser des guillemets simples pour éviter l'échappement supplémentaire, vous pouvez plutôt combiner et faire correspondre des guillemets dans le même argument:
$ 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
Appliqué à votre cas:
echo 'test text "here_is_some_test_text_'"$counter"'" "output"' >> "$FILE"
utiliser printf:
printf 'test text "here_is_some_test_text_%s" "output"\n' "$counter" >> ${FILE}
Utilisez un heredoc:
cat << EOF >> ${FILE}
test text "here_is_some_test_text_$counter" "output"
EOF
La manière la plus lisible et fonctionnelle utilise des accolades entre guillemets.
'test text "here_is_some_test_text_'"${counter}"'" "output"' >> "${FILE}"
Affiche une variable entourée de guillemets simples:
printf "'"'Hello %s'"'" world
Vous pouvez le faire de cette façon:
$ 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"
Explication : La commande Eval traitera une chaîne en tant que commande. Ainsi, une fois le montant échappé correct, le résultat souhaité sera généré.
Il dit exécuter la chaîne suivante en tant que commande:
'echo test text \"here_is_some_test_text_$counter\" \"output\"'
Commande à nouveau en une ligne:
counter=1 eval echo `echo 'test text "here_is_some_test_text_$counter" "output"' | sed -s 's/\"/\\\\"/g'` > file