bash变量插值通过连字符或下划线分隔变量。

8 浏览
0 Comments

bash变量插值通过连字符或下划线分隔变量。

这只是一个简单的脚本,用于查看文件是否已下载。在这个脚本中,find命令总是评估为零 - 即使它没有找到任何内容。所以我注释掉了它。

filename="day_CTRwFEES_hoo01M_"中,我必须在文件名的末尾添加一个下划线。

使用下划线$filename_$yesterday.CSV来分隔这两个不起作用。-我必须去掉下划线,将其添加到文件名中,然后组合变量使其工作,像这样$filename$yesterday

如何在不在变量$filename末尾添加下划线的情况下使其工作呢?

#!/bin/bash
set -x
dayofweek=$(/bin/date +%w)
today=$(/bin/date +%Y%m%d)
yesterday=$(/bin/date -d "1 day ago" +%Y%m%d)
friday_morning=$(/bin/date -d "3 days ago" +%Y%m%d)
filename="day_CTRwFEES_hoo01M_"
#if find /data/today/ -type f -name "$filename_$yesterday.CSV" ; then
if ls "/data/today/$filename$yesterday.CSV" ; then
    echo "successful"
else
    echo "$filename$yesterday.CSV未下载,请检查。" | mail -s "$filename$yesterday.CSV未下载" casper@big_bank.com
    fi
casper@good_host5981dap:~/walt/morning_checks$ ./check_day_CTRwFEES_hoo01M
++ /bin/date +%w
+ dayofweek=5
++ /bin/date +%Y%m%d
+ today=20141024
++ /bin/date -d '1 day ago' +%Y%m%d
+ yesterday=20141023
++ /bin/date -d '3 days ago' +%Y%m%d
+ friday_morning=20141021
+ filename=day_CTRwFEES_hoo01M_
+ ls data/today/day_CTRwFEES_hoo01M_20141023.CSV
/data/today/day_CTRwFEES_hoo01M_20141023.CSV
+ echo successful
successful

~

0
0 Comments

问题:如何在bash中使用变量插值?如何用连字符或下划线分隔变量?

在bash中,使用变量插值时,有几种可能的方法和解决方案:

1. 使用花括号将变量名括起来,这是最自然的方法:

echo "${filename}_$yesterday.CSV"

2. 由于分隔符是一个特殊字符,可以使用反斜杠来转义:

echo "$filename\_$yesterday.CSV"

3. 使用引号拼接字符串:

echo "$filename""_$yesterday.CSV"

或者

echo "$filename"_"$yesterday.CSV"

4. 使用辅助变量作为分隔符:

sep=_
echo "$filename$sep$yesterday.CSV"

5. 使用辅助变量逐步构建最终的字符串:

final=$filename
final+=_$yesterday.CSV
echo "$final"

或者更冗长的写法:

final=$filename
final+=_
final+=$yesterday
final+=.CSV
echo "$final"

6. 使用辅助变量和printf函数构建最终的字符串:

printf -v final "%s_%s.CSV" "$filename" "$yesterday"
echo "$final"

以上是一些常见的解决方法,欢迎在本文中添加其他方法。

0
0 Comments

在bash中,有时候我们想要将两个变量的值通过连字符或下划线分隔开来,但是直接在变量名中使用连字符或下划线会导致解释器无法正确识别变量名。

解决这个问题的方法是使用反斜杠对特殊字符进行转义。通过在连接符之前添加反斜杠,我们可以告诉bash将其视为普通字符而不是特殊字符。

以下是一个示例,展示了使用反斜杠进行变量插值的方法:

# filename=test
# yesterday=somedate
# echo $filename_$yesterday.csv
somedate.csv
# echo $filename\_$yesterday.csv
test_somedate.csv
#

在这个示例中,我们有两个变量:filename和yesterday。我们想要将它们的值通过下划线连接起来,并添加.csv后缀。然而,如果我们直接使用$filename_$yesterday.csv,bash将无法正确解析变量名,因为它会将_视为一个特殊字符,而不是连接符。因此,我们需要使用反斜杠对_进行转义,使其成为普通字符。这样,bash就能正确识别变量名,并将它们的值连接起来。

通过使用$filename\_$yesterday.csv,我们可以获得我们期望的结果:test_somedate.csv。

当我们想要在bash中通过连字符或下划线将两个变量的值连接起来时,我们需要使用反斜杠对连接符进行转义,以避免解释器错误地识别变量名。

0
0 Comments

在bash脚本中,使用${}来解释变量名是一个良好的习惯。这样做的好处是可以清晰地告诉bash变量名的结束位置。如果不使用${}来解释变量名,可能会导致变量名的错误解释或混淆。

在bash脚本中,如果要在变量名中使用连字符或下划线来分隔变量,可以使用以下语法:

"${filename}_$yesterday.CSV"

这样的语法可以将变量名和分隔符正确地分开,避免了变量名解释错误的问题。

因此,为了正确解释变量名并避免混淆,建议在bash脚本中始终使用${}来解释变量名。这样可以确保变量名的正确解释,并提高代码的可读性和可维护性。开始使用${}来解释变量名吧!

0