bash 脚本不适用于变量

bash script doesn't work with variables

给定一个具体的日期,我想查询和下载数据。数据的格式为 2018-04-22,但脚本采用 2018 04 22 格式的数据,因此我正在执行以下操作:

 #!/bin/sh

filename=extract_dates.dat

line=1
totline=`wc -l < $filename`

while [ $line -le $totline ]
do
    date=`sed -n -e ''"$line"'p' $filename | awk '{print $line}'`
    startdate=$(echo $date | tr "-" " ") # ex: 2018-04-22 --> 2018 04 22
    plusone=`echo ${startdate:8:2}`      # extracts the last 2 digits from date. so in this example 22 
    enddate=${startdate:0:8}`expr $plusone + 1` # plus 1 .. so now it's 23
    echo \'$startdate\'    # '2018 04 22'
    echo \'$enddate\'      # '2018 04 23'

    mkdir $date
    cd $date

    # query and download data
   ../prog_access.sh -StartDate \'$startdate\' -EndDate \'$enddate\'    

脚本运行但输出结果为空。 但是,这在命令行中工作得很好:

   ../prog_access.sh -StartDate '2018 04 22' -EndDate '2018 04 23'

怎么了?我知道问题出在日期上,但我不知道如何解决。

您需要在脚本中使用 "$startdate" 而不是 \'$startdate\'

../prog_access.sh -StartDate "$startdate" -EndDate "$enddate"

\'2018 04 22\''2018 04 22' 不同。在脚本中将此字符串作为命令参数传递与键入

具有相同的效果
../prog_access.sh -StartDate \'2018 04 22\' -EndDate \'2018 04 23\'

在命令行中,这种方法导致 StartDate 参数被读取为 '2018

此外,您不能在脚本中使用 '$startdate',因为它不会替换变量值。

您可以查看 问题的答案,以更熟悉 bash 如何从变量传递参数以及在各种情况下如何读取它们。