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-DDYYYYMMDD之类的日期,因为它们使日期更容易按正确的顺序排序。

相关内容