web-dev-qa-db-ja.com

単一引用符で囲まれた文字列で変数を使用するにはどうすればよいですか?

単一引用符内の変数をエコーする方法を疑問に思っています(文字列に引用符が含まれているため、単一引用符を使用しています)。

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

どんな助けも大歓迎です

24

変数は二重引用符付き文字列で展開されますが、単一引用符付き文字列では展開されません。

 $ name=World

 $ echo "Hello $name"
 Hello World

 $ echo 'Hello $name'
 Hello $name

引用符を簡単に切り替えることができる場合は、切り替えてください。

追加のエスケープを回避するために一重引用符を使用したい場合は、代わりに同じ引数で引用符を組み合わせて一致させることができます。

 $ 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

あなたのケースに適用:

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

printfを使用します。

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

ヒアドキュメントを使用します。

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

最も読みやすく、機能的な方法は、二重引用符の中に中括弧を使用します。

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

単一引用符でラップされた変数を出力します。

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

次の方法で実行できます。

$ 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"

説明:Evalコマンドは文字列をコマンドとして処理するため、適切な量のエスケープ後、目的の結果が生成されます。

次の文字列をコマンドとして実行します:

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

1行でもう一度コマンドを実行します。

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