私はこれをスクリプトに書いています。他の部分もありますが、この部分だけで行き詰まっています。
if [[$# == $year $month $day ]] ; then
cal $day $month $year
fi
これを実行すると、次のメッセージが表示されます:
[[3: command not found
それで、問題は何でしょうか? 構文の問題でしょうか、それとも実際のコマンドの問題でしょうか?
参考になれば、スクリプトの残りの部分を以下に示します。
year=$(echo "$year" | bc)
month=$(echo "$month" | bc)
day=$(echo "$day" | bc)
if [[$# == $year $month $day ]] ; then
cal $day $month $year
fi
答え1
角括弧の後にスペースを入れる必要があります[[
。
if [[ $# == $year $month $day ]] ; then
cal $day $month $year
fi
また、あなたが書いたようには動作しません。文字列として比較するか、まったく別の方法を使用します。おそらく$#
:$year $month $day
if [[ "$#" == "$year$month$day" ]] ; then
cal $day $month $year
fi
答え2
これにはかなり多くの問題があります。
[[
:の後にスペースが必要です。[[ $# == $year $month $day ]]
$#
それはあなたが考えているものとは違います。それはスクリプトまたは関数に渡される引数の数です。あなたはそれが実際には引数のリストだと思っているようです。==
は文字列を比較するため、ある種のリストを与えることになります。スクリプトに渡された引数のリストを と比較するには$day
$month
$year
、次のようにします。[[ "$@" == "$day $month $year" ]]
私のcal
そうはいかないcal
場合はそうはいきませんがどうやら新しいバージョンでは動作します。実際に何をしようとしているのか分かりませんが、動作しません。おそらく次のようなものをお探しですかdate -d "$day/$month/$year"
? 例えば$ date -d "08/10/2014" Sun Aug 10 00:00:00 CEST 2014
または、特定の月のカレンダーを表示する場合:
$ 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