/ / BASH - Citando corretamente um comando de data - bash

BASH - Citando corretamente um comando de data - bash

No processo de escrever um script bash para analisarum arquivo separado por tab e, infelizmente, eu preciso pedir ao usuário uma data fora do conteúdo / criação do arquivo. Eu consegui tudo funcionando, exceto looping através de datas mal introduzidas do usuário até que eles entram um correspondente ao formato desejado. Meu bloco de código de depuração é o seguinte ...

Código:

#!/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"

Do acima exposto, nenhum dos comandos de data pareceavalie corretamente dentro do if, mas executando os comandos de depuração diretamente no trabalho da CLI. Tenho certeza de que este será um acordo de cotação / retrocesso, mas não consigo entender.

Respostas:

2 para resposta № 1

Você não precisa escapar as citações que não estão dentro de citações semelhantes. Por exemplo, não

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

mas

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