Vous pouvez éviter une inutile l'utilisation d' cat
et poignée incompatibles citations mieux avec ceci:
$ read -r -d '' VAR <<'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF
Si vous ne citez pas la variable lorsque vous l'écho, les retours à la ligne sont perdues. Citant les conserve:
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''
Si vous souhaitez utiliser l'indentation pour des raisons de lisibilité dans le code source, utilisez un tiret après le moins thans. Le retrait doit être fait en utilisant uniquement les onglets (pas d'espaces).
$ read -r -d '' VAR <<-'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''
Si, au lieu de cela, vous voulez préserver les onglets dans le contenu de la variable qui en découle, vous devez supprimer l'onglet de IFS
. Le terminal de marqueur pour la doc ici (EOF
) ne doit pas être en retrait.
$ IFS='' read -r -d '' VAR <<'EOF'
abc'asdf"
$(dont-execute-this)
foo"bar"''
EOF
$ echo "$VAR"
abc'asdf"
$(dont-execute-this)
foo"bar"''
Les onglets peuvent être insérés dans la ligne de commande en appuyant sur Ctrl-V Tab. Si vous utilisez un éditeur, en fonction de celui qui, qui peut également fonctionner ou vous devrez peut-être désactiver la fonction qui convertit automatiquement les tabulations en espaces.