アンダースコアが後に続く変数のbash変数置換


12

変数BUILDNUMBERは値230に設定されています。以下のように230_、コマンドに対してecho $BUILDNUMBER_出力されることを期待していますが、出力は空です。

# echo $BUILDNUMBER_

# echo $BUILDNUMBER
230

回答:


26

コマンドecho $BUILDNUMBER_は、$BUILDNUMBER_設定されていない変数の値を出力します(下線は、Jeff Schallerによって明示的に示されている変数名の有効な文字です)

変数名を中括弧(中括弧)で囲むか、最も厳密なprintfツールを使用する必要があります。

echo "${BUILDNUMBER}_"
printf '%s_\n' "$BUILDNUMBER"

PS:常に変数を引用してください。


ドキュメントと標準では、(未設定の変数ではなく)空の文字列に設定された変数に「null」という用語を使用しています。私は編集の自由を取りました。
ilkkachu 2017

8

George Vassiliouが既に説明したように、それはあなたがの$BUILDNUMBER_代わりに変数を出力しているから$BUILDNUMBERです。欲しいものを手に入れる最良の方法は${BUILDNUMBER}_、ジョージが説明したように使うことです。さらにいくつかのオプションがあります:

$ echo "$BUILDNUMBER"_
230_
$ echo $BUILDNUMBER"_"
230_
$ printf '%s_\n' "$BUILDNUMBER"
230_

変数が何を保持しているかはわかっていますが、何$IFSが保持されているかはわかりませんecho $BUILDNUMBER"_"。3つのうち、printf '%s_\n' "$BUILDNUMBER"何を保持している$BUILDNUMBERかわからない場合にのみ正しいです$IFS
ステファンChazelas
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.