Aceite os argumentos de entrada e passe-os até a data

1

Então, estou tentando escrever um script de shell para receber uma entrada, conforme abaixo:

bash whichday Jan 10 2017

e deve receber essa entrada e imprimir em que dia ela ocorre. Abaixo está o script que estou tentando usar:

#!/bin/bash
if [ $# -ne 3 ]
    then
    echo "Please enter the month day year (example: Jan 5 2002)"

else
    str=\"$1" "$2" "$3\"
    echo $str
    date -d $str +%A
fi 

mas toda vez que eu executo isso, recebo a seguinte saída:

"Jan 10 2017"
date: extra operand ‘2017"’
Try 'date --help' for more information.

Quando faço

date -d "Jan 10 2017" +"%A"

na linha de comando, ele exibe o dia correto (terça-feira), mas o script, que deve estar executando exatamente o mesmo comando, não funciona. Por favor ajude, eu não entendo porque isso está acontecendo.

    
por Joshua Geary 17.03.2017 / 19:46

1 resposta

3

Basta definir

str="$1 $2 $3"

e depois

date -d "$str" +'%A'

Ao escapar das aspas duplas, você as torna parte do valor de $str e date não consegue analisá-las.

Você também pode ignorar completamente a variável str usando $* :

echo "$*"
date -d "$*" +'%A'
    
por 17.03.2017 / 19:51