簡體   English   中英

bash 變量插值用連字符或下划線分隔變量

[英]bash variable interpolation separate variables by a hyphen or underscore

這是一個簡單的腳本,只是為了查看文件是否已下載。 在這個腳本中, 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

~

通過告訴 bash 變量名在哪里結束。

"${filename}_$yesterday.CSV"

幾種可能:

  • 最自然的一個:將變量名括在大括號中(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"

(隨意在這篇文章中添加其他方法)。

您可以使用反斜杠來做到這一點。

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM