2つの変数を下線で連結する

2つの変数を下線で連結する

下線付きのファイル名を作成するには、両方の変数を連結する必要があります。私の変数を呼び出し$FILENAMEて、$EXTENSIONファイルからファイル名を読み取る場所を指定してみましょう。

FILENAME=Hello
EXTENSION=WORLD.txt

今...

私は成功せずに次のことを試しました。

NAME=${FILENAME}_$EXTENSION
NAME=${FILENAME}'_'$EXTENSION
NAME=$FILENAME\\_$EXTENSION

私はいつも奇妙な結果を得ます。通常、下線が最初に来ます。

私はそれが必要です

echo $NAME
Hello_WORLD.txt

答え1

次のように使用できます。

NAME=$(echo ${FILENAME}_${EXTENSION})

これはまた働きます:

NAME=${FILENAME}_${EXTENSION}

答え2

あなたの:

NAME=${FILENAME}_$EXTENSION
NAME=${FILENAME}'_'$EXTENSION

どちらも大丈夫なので、次のようになります。

NAME=${FILENAME}_${EXTENSION}
NAME=$FILENAME'_'$EXTENSION
NAME=$FILENAME\_$EXTENSION
NAME=$FILENAME"_$EXTENSION"

(しかしもちろんいいえ NAME=$(echo ${FILENAME}_${EXTENSION})〜のようにそれを使うechoそしてsplit+globオペレーター)。

NAME=$FILENAME_$EXTENSION

同じです:

NAME=${FILENAME_}${EXTENSION}

as _\または逆')は変数名に有効な文字です。

問題は、行がLFではなくCRLFで区切られていることです。これは、変数の内容がCR文字で終わることを意味します。

端末に書き込むとき、CR 文字は端末にカーソルを行の先頭に移動するよう指示します。したがって、Hello<CR>_WORLD.TXT<CR>端末に送信されると_WORLD.TXT(上書きHello)と表示されます。

答え3

${FILENAME}_${EXTENSION}上記の構文に切り替えました。

$()両方の変数を下線で連結する必要があるときに使用しました。たとえば、$YYYYMMDD$()_$HHMMSSYYYYMMDD_HHMMSS形式のタイムスタンプを含むファイル名を生成します。中間部分は$()何も返さず、2つの変数を分離します。

私はtimeこの方法と上記の方法のいくつかを使用して割り当てを測定しましたが$YYYYMMDD$()_$HHMMSS、私が使用していた以前のサーバーですべて0msを報告しました。パフォーマンスに問題はないようです。

答え4

Stefan Chazerasの答え

NAME=${FILENAME}_$EXTENSION

もちろん、これは最善の答えであり、許容される答えでなければなりません。しかしこれに合わせてユーザー208145の回答、代替は次のとおりです。

UNDERSCORE='_'
NAME=$FILENAME$UNDERSCORE$EXTENSION

関連情報