現在のディレクトリ内のファイル数がファイル チェックの最初の行で指定された数より大きい場合に hello を出力するコマンド ラインを記述します。
これは問題なく動作しますが、コマンド ラインを 1 つにしたいです。何かアイデアはありますか?
firstline=$(head -1 check)
allfiles=$(ls | wc -l)
echo $allfiles $firstline
if (($allfiles > $firstline)); then
echo "hello"
else
echo "oh no"
fi
答え1
次のワンライナーを使用できます:
files=( * ); [[ ${#files[@]} -gt $(head -1 check) ]] && echo 'hello' || echo 'oh no'
files
配列には現在のディレクトリのファイルが含まれるため、${#files[@]}
配列内の要素、つまり現在のディレクトリ内のファイルの数が表示されます。
check
最初の行が数字であるファイルは によって抽出されますhead -1 check
。
展開された形式は次のとおりです。
check
最後に、ファイル数が( )の最初の行の数より大きい場合は[[ ${#files[@]} -gt $(head -1 check) ]]
、hello
が印刷されます。
展開された形式は次のとおりです。
#!/bin/bash
files=( * )
if [[ ${#files[@]} -gt $(head -1 check) ]]; then
echo 'hello'
else
echo 'oh no'
fi