hh:mm:ss型変数を比較する次のスクリプトを作成しました。
#!/bin/sh
lag=00:00:00
MAX_LAG=00:05:00
echo $lag
echo $MAX_LAG
if [ "$lag" \< "$MAX_LAG" ]
##if [ "$lag" -lt "$MAX_LAG" ]
##if [ "$lag" -lt "$MAX_LAG" ]
then
echo "No LAG found."
else
echo "LAG more than $MAX_LAG was found."
fi
Linuxボックスで実行すると、スクリプトは正しい出力を提供します。
[test@sandboxtest02 ~]$ ./testhh.sh
00:00:00
00:05:00
No LAG found.
ただし、Solaris ボックスで同じスクリプトを実行すると、スクリプトでエラーが発生します。
% sh test.sh
00:00:00
00:05:00
test.sh: test: unknown operator <
Solarisボックスで何を変更すべきかを提案してもらえますか?
ベストアンサー1
<
標準演算子ではないtest
/[..]
(下記の引用を参照)。 Bash、Dash、busyboxなどではサポートされているようですが、Zshではサポートされていないようです(Kshの他のバージョンについてはわかりません)。 Bash、ksh、Zshもサポートされています(エスケープは不要)。これらのいずれかをサポートするシェルを見つけて使用する必要があります。[[ str1 < str2 ]]
<
(知っているSolaris 10 以前には POSIX 以前のバージョンもありました。/bin/sh
、これはいかなる意味でも標準ではないので重要ではありません。 )
新しく発明されたまたはKornShellからのいくつかの追加の基本コマンドは、条件付きコマンドの一部として最初の提案に登場しました([[]]):s1>s2、s1<s2、...次に渡されません。テスト条件付きコマンドがまだ含まれていないため、シェルから削除されたときのユーティリティテスト歴史的実装に組み込まれたユーティリティシェン便利です。