BASH - 正确引用日期命令

时间:2015-07-03 15:43:41

标签: bash

在编写bash脚本以解析制表符分隔文件的过程中,不幸的是我需要向用户询问文件内容/创建之外的日期。我已经完成了所有工作,除了从用户循环输入错误的日期,直到他们输入匹配所需格式的日期。 我的调试代码块如下......

代码:

#!/bin/bash
USER_INPUT="01-01-2011" # ARBITRARILY ASSIGNING A BAD DATE BECAUSE I'M TOO LAZY TO TYPE ONE IN EACH TIME
EXPERIMENTDATE="$USER_INPUT"
if [[ $OSTYPE == *"linux"* ]]
then
    date -d \"$EXPERIMENTDATE\" +%Y-%m-%d > /dev/null  2>&1
else
    date -j -f \"%Y-%m-%d\" \"$EXPERIMENTDATE\" +%Y-%m-%d > /dev/null  2>&1
fi
is_valid="$?"
echo -e "$is_valid"
# FYI - $? RETURNS A BINARY FLAG ON THE LAST COMMAND'S EXECUTION. 1 IF ERROR, 0 IF NORMAL EXIT
while [ $is_valid -ne 0 ]; do
    echo -e "Invalid date entered. Please enter the day the experiement was conducted on, in exactly the following format. YYYY-MM-DD (e.g. 2011-04-22)"
    read USER_INPUT
    EXPERIMENTDATE=$USER_INPUT
    echo -e "You entered $EXPERIMENTDATE"
    if [[ $OSTYPE == *"linux"* ]]
    then
        echo -e "DEBUG: date -d \"$EXPERIMENTDATE\" +%Y-%m-%d > /dev/null 2>&1"
        date -d \"$EXPERIMENTDATE\" +%Y-%m-%d > /dev/null 2>&1
    else
        echo -e "DEBUG: date -j -f \"%Y-%m-%d\" \"$EXPERIMENTDATE\" +%Y-%m-%d > /dev/null  2>&1"
        date -j -f \"%Y-%m-%d\" \"$EXPERIMENTDATE\" +%Y-%m-%d > /dev/null  2>&1
    fi
    is_valid="$?"
    echo -e "DEBUG: $is_valid"
done
echo -e "You entered $EXPERIMENTDATE"

从上面可以看出,没有一个日期命令似乎在if中正确评估,而是直接在CLI上执行调试命令。 我确定这将是一个引用/后退的交易,但我似乎无法弄明白。

1 个答案:

答案 0 :(得分:2)

您不需要转义不在类似引号内的引号。例如,不是

date -j -f \"%Y-%m-%d\" \"$EXPERIMENTDATE\" +%Y-%m-%d > /dev/null  2>&1

date -j -f "%Y-%m-%d" "$EXPERIMENTDATE" +%Y-%m-%d > /dev/null  2>&1