16

0_1コードを使用してBashで表示する場合は非常に興味深いです

x=0
y=1
echo "$x_$y"

その後、表示のみになります

1

試しecho "$x\_$y"てみましたが、うまくいきません。

フォームをエコーするにはどうすればよい$x_$yですか? ファイル名文字列で使用します。

4

4 に答える 4

26

変数名にはアンダースコアを含めることができるため、コマンドは次のようになります。

echo "$x_$y"

エコーしようとして${x_}います(あなたの場合はおそらく空です)に続いて${y}. $この理由は、パラメーター展開が貪欲な操作であるためです。変数名を形成するには、 の後にできるだけ多くの有効な文字が必要です。

bashマンページの関連部分には次のように記載されています。

文字は$、パラメーター展開、コマンド置換、または算術展開を導入します。

展開されるパラメーター名またはシンボルは中かっこで囲むことができます。これはオプションですが、名前の一部として解釈される可能性のある直後の文字から展開される変数を保護するのに役立ちます。

中かっこが使用される場合、対応する終了中かっこは}、バックスラッシュまたは引用符で囲まれた文字列内でエスケープされていない最初のものであり、組み込みの算術展開、コマンド置換、またはパラメーター展開内ではありません。

したがって、解決策は、が最初の変数の一部として扱われない_ようにすることです。これは次の方法で実行できます。

echo "${x}_${y}"

私はすべての bash 変数を次のようにする傾向があります。

echo "${x}"

それはより明白なので、私は過去に何度も噛まれました:-)

于 2013-01-18T01:24:35.633 に答える
12

こちらです:

$ echo "${x}_${y}"
0_1
于 2013-01-18T01:09:43.483 に答える
8

中括弧で囲みます。

echo "${x}_${y}"

于 2013-01-18T01:09:51.700 に答える
5

トレンドに逆らうために、これを行うこともできます。

echo $x'_'$y

引用された部分と引用されていない部分をスペースなしで隣り合わせにすることができます。また'、変数名としては正当な文字ではないため、bash は のみを置き換え$xます。:)

于 2013-01-18T01:38:39.817 に答える