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 如何从变量传递参数以及在各种情况下如何读取它们。
给定一个具体的日期,我想查询和下载数据。数据的格式为 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'
,因为它不会替换变量值。
您可以查看