Bashスクリプト - エスケープされたドル記号($)をその変数に展開します。

Bashスクリプト - エスケープされたドル記号($)をその変数に展開します。

私の質問

このスクリプトがありますrun.sh

#!/bin/bash

TODAY=$(date)
FILE="my_file.txt.\${TODAY}"

エコーすると、FILE次のような結果が表示されます。

echo ${FILE}

Output: `my_file.txt.${TODAY}`

しかし、私はこれが欲しい:

echo ${FILE}

Output: `my_file.txt.15032023

私の回避策はありますが、より良いものが必要です。

eval echo ${FILE}

Output: `my_file.txt.15032023`

答え1

これはあなたが求めているものですか?

#!/bin/bash

TODAY=$(date +"%d%m%y")
FILE="my_file.txt.${TODAY}"

echo "${FILE}"

これで以下が./run.sh生成されます。

user@wang$ ./test.sh 
my_file.txt.150323

答え2

さて、いつでも以下を使用して手動で交換を実行できます${var/pattern/replacement}

$ FILE='my_file.txt.${TODAY}'
$ TODAY=123456
$ FILE="${FILE/'${TODAY}'/$TODAY}"
$ echo "$FILE"
my_file.txt.123456

または、デフォルトの出力形式が異なる"${FILE/'${TODAY}'/$(date +"%d%m%Y"}"と思われるので、表示される形式で日付を取得してください。date

コメント付きの注:YYYY-MM-DDまたはなどの日付を使用すると、YYYYMMDD日付を正しい順序で簡単に並べ替えることができます。

関連情報