【问题标题】:bash script doesn't work with variablesbash 脚本不适用于变量
【发布时间】:2018-10-09 15:32:12
【问题描述】:

给定一个特定的日期,我想查询和下载数据。数据格式为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'

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

【问题讨论】:

  • @rkta:如问题所示,#! 有一个前导空格,所以它没有任何作用。不过你是对的,#! 是错误的。
  • 当您似乎在使用sh 时,为什么还要用bash 标记这个问题?

标签: bash sed tr


【解决方案1】:

您需要在脚本中使用"$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',因为它不会替换变量值。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-15
    • 2013-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-16
    • 1970-01-01
    相关资源
    最近更新 更多