这是一个简单的脚本,只是为了查看文件是否已下载。在此脚本中,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 was not downloaded, please check." | mail -s "$filename$yesterday.CSV not downloaded" 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 :(得分:4)
告诉bash变量名称的结束位置。
"${filename}_$yesterday.CSV"
答案 1 :(得分:1)
几种可能性:
最自然的一个:用变量括号括起你的变量名(Ignacio Vazquez-Abrams的解决方案):
echo "${filename}_$yesterday.CSV"
由于您的分隔符是一个相当特殊的字符,您可以使用反斜杠(Sriharsha的Kallury解决方案):
echo "$filename\_$yesterday.CSV"
(Ab)使用引号:
echo "$filename""_$yesterday.CSV"
或
echo "$filename"_"$yesterday.CSV"
为分隔符使用辅助变量:
sep=_
echo "$filename$sep$yesterday.CSV"
为最终字符串使用辅助变量,并逐步构建它:
final=$filename
final+=_$yesterday.CSV
echo "$final"
或以更长的方式:
final=$filename
final+=_
final+=$yesterday
final+=.CSV
echo "$final"
为最终字符串使用辅助变量,并使用printf
:
printf -v final "%s_%s.CSV" "$filename" "$yesterday"
echo "$final"
(随意在这篇文章中添加其他方法)。
答案 2 :(得分:0)
你可以使用反斜杠来做到这一点。
# filename=test
# yesterday=somedate
# echo $filename_$yesterday.csv
somedate.csv
# echo $filename\_$yesterday.csv
test_somedate.csv
#