私はこれを私の台本に書いています。他の部分もありますが、私はこの部分だけをつかんで進みます。
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