Ich schreibe dies in mein Skript. Es hat andere Teile, aber ich komme nur bei diesem Teil nicht weiter.
if [[$# == $year $month $day ]] ; then
cal $day $month $year
fi
Wenn ich dies ausführe, erhalte ich diese Meldung:
[[3: command not found
Also, wo liegt das Problem? Handelt es sich um eine Syntax oder einen tatsächlichen Befehl?
Hier ist der Rest meines Skripts, falls das hilft:
year=$(echo "$year" | bc)
month=$(echo "$month" | bc)
day=$(echo "$day" | bc)
if [[$# == $year $month $day ]] ; then
cal $day $month $year
fi
Antwort1
Sie müssen nach den eckigen Klammern ein Leerzeichen einfügen [[
.
if [[ $# == $year $month $day ]] ; then
cal $day $month $year
fi
So wie Sie es geschrieben haben, funktioniert das auch nicht. Sie haben „compare $#
“ $year $month $day
als Zeichenfolge oder etwas ganz anderes. Vielleicht:
if [[ "$#" == "$year$month$day" ]] ; then
cal $day $month $year
fi
Antwort2
Dies bringt eine ganze Reihe Probleme mit sich.
Sie benötigen ein Leerzeichen nach
[[
:[[ $# == $year $month $day ]]
$#
ist nicht das, was Sie denken. Es ist die Anzahl der Argumente, die an ein Skript oder eine Funktion übergeben werden. Es sieht so aus, als ob Sie denken, es sei tatsächlich die Liste der Argumente.==
vergleicht Zeichenfolgen, Sie geben ihm eine Art Liste. Um die Liste der an Ihr Skript übergebenen Argumente mit zu vergleichen$day
$month
$year
, würden Sie etwa Folgendes tun:[[ "$@" == "$day $month $year" ]]
. Meinscal
funktioniert so nichtcal
funktioniert nicht so, aberscheinbareinige neuere Versionen tun das. Ich habe keine Ahnung, was Sie eigentlich versuchen, aber es wird nicht funktionieren. Suchen Sie vielleicht nachdate -d "$day/$month/$year"
? Zum Beispiel$ date -d "08/10/2014" Sun Aug 10 00:00:00 CEST 2014
Oder wenn Sie den Kalender eines bestimmten Monats anzeigen möchten:
$ cal 10 2014 October 2014 Su Mo Tu We Th Fr Sa 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31