web-dev-qa-db-ja.com

一重引用符内の変数内の値を出力する方法はありますか?

変数siteを設定し、echoまたはprintfで出力する必要があると考えてください。ただし、一重引用符を使用して何かを記述し、変数を使用したい場合はどうすればよいですか?

例:

$ site=unix.stackexchange.com
$ echo "visit:$site"
visit:unix.stackexchange.com

しかし、私が単一引用符を使用する場合:

$ echo 'visit:$site'
visit:$site

次に、''は強力な引用であり、変数を展開しません

私は何かを試しました:

$ echo 'visit:"$site"'
visit:"$site"

しかし成功しません。したがって、私は単一引用符を使用しながら変数内の値を出力する方法を探しています。

9
Pandya

単一引用符で変数を展開することはできません。ただし、一重引用符を終了して二重引用符を開始できます。

echo 'visit:"'"$site"'"'

または、二重引用符内で二重引用符をバックスラッシュすることができます。

echo "visit:\"$site\""
20
choroba

可変コンテンツの印刷を扱う場合は、 echoの代わりにprintf を使用する必要があります。

printf 'visit:%s\n' "$site"

visit:の文字に関係なく、$siteの後に$siteの内容と改行が出力されます。

8
cuonglm

チョロバは正しいです。

これがある種のなぞなぞだったとしても、私はこれで応答します。

cat << EOF | sh
> echo 'visit:$site'
> EOF

ジャンダーが指摘するように、これはインジェクション攻撃に対して広く開かれています。それは深刻な答えではなかったので、もし誰かがこのようなものを使用することを考えているなら、それを信頼できない入力で使用しないでください。たとえば、$site文字列は、コンテンツを盲目的に実行する前の有効なURLです。 this のようなものが役立つ可能性があります(ただし、指定された式は注入を許可するため完全ではありませんが、そのようなメカニズムを使用してテストします)。

1
Stephen

リクエストの権利を理解できれば、エコーされた文字列をeval(uate)できます。例えば。:

# eval echo 'visit:$site'
visit:unix.stackexchange.com
0
drgnfr