次のスクリプトではエラーが発生します。
#!/bin/bash
if [[ $(wc -l "/disk1/environment.sh") -ge 0 ]];then
echo "File has data"
fi
line 2: [[: 5 /disk1/environment.sh: division by 0 (error token is "/environment.sh")
しかし、以下のコードはうまくいきます。
#!/bin/bash
if [[ $(wc -l "/disk1/environment.sh") > 0 ]];then
echo "File has data"
fi
ここで「-ge」と「>」がなぜ異なる動作をするのかを教えてくれる人はいますか?
バッシュバージョン:GNU bash, version 3.2.25(1)-release (x86_64-redhat-linux-gnu)
ベストアンサー1
wc -l /filename
これは、次のように出力される出力によるものです。
5 /filename
ただし、整数比較(演算子-ge
:)を実行しているため、関係のない部分が/filename
無効でエラーメッセージが表示されます。
数が返されるwc
ようにSTDINを介してファイル名を渡すだけです。wc
[[ $(wc -l </disk1/environment.sh) -ge 0 ]]
2番目の場合は、[[ $(wc -l /disk1/environment.sh) > 0 ]]
コマンド置換の出力が$(wc -l /disk1/environment.sh)
アルファベット順にソートされていることを確認してください0
。wc
これは、いくつかのエラーが返され、STDOUTで結果が生成されない限り、常にそうです。
、、、、などの[[
算術演算子はサポートされていません。次のキーワードが必要です。>
>=
<
<=
((
(( $(wc -l </disk1/environment.sh) > 0 ))