「if;then」構文を使用せずに、「wc」の出力を不等式(-gt)に渡すにはどうすればよいですか?

「if;then」構文を使用せずに、「wc」の出力を不等式(-gt)に渡すにはどうすればよいですか?

たとえば、深さ1のパターンに一致するファイル数を数え、数字と比較して3つ以上のファイルがあるかどうかを確認したいと思います。しかし、if / then構文を使用せずにこれを実行したいと思います。

それは次のとおりです。

ls -1q -d *patternX* | wc -l | [ -ge 3]

if/then構文を使用してエスケープする方法があるかどうかを教えてください。ありがとうございます!

ベストアンサー1

一致する名前の数を数え、*patternX*3以上であるかどうかをテストしたいようです。

これを行う方が良いです。

shopt -s nullglob

set -- *patternX*
if [ "$#" -ge 3 ]; then
    echo 'More than 2 names match the pattern'
fi

これにより、位置パラメータがパターンと一致する名前に設定されます。一致する名前の数がに保存されます$#。このnullglobオプションは、名前が一致しない場合、パターンが拡張されていないまま残り、完全に削除されるように設定されます。

名前付き配列を使用して一致する名前を保存することもできます。

shopt -s nullglob

names=(*patternX*)
if [ "${#names[@]}" -ge 3 ]; then
    echo 'More than 2 names match the pattern'
fi

また、見ることができますなぜ`ls`を解析しないのですか*(そしてどうすればいいですか?)


言葉なしifthen

shopt -s nullglob

set -- *patternX*
[ "$#" -ge 3 ] && echo 'More than 2 names match the pattern'

同様のアプローチが使用されますawk

shopt -s nullglob

awk 'BEGIN { if (ARGC > 3) print "more than 2" }' *patternX*

ARGCinはawkコマンド名($0シェルの名前)を意味します。

おすすめ記事