正如其他人所指出的那樣,這不是一個準確的方法來計算你的文件的數量。它會計算包含換行符的文件,並且可能有其他問題。 然而,這是一個非常好的方法來計算ls
將打印的行數,如果它們太多,就不會顯示它們,這是您大概試圖做的。
因此,要回答你的一般性問題,使一個命令依賴於他人的結果,你可以使用
command1 && command2
一個將運行command2
只有command1
成功。如果你想只有當第一的成績通過一些測試要執行的第二,你可以使用:
[ command1 ] && command2
對於你的榜樣,這將是:
[ $(ls | wc -l) -gt 100 ] && echo too many
再次重,如果測試執行ls
被傳遞,使用
[ $(ls | wc -l) -gt 100 ] && echo too || ls
或
if [ $(ls | wc -l) -gt 200 ]; then echo 'too many files!'; else ls; fi
但是,所有這些都不雅觀,因爲它們需要運行兩次命令。一個更好的辦法可能是,一旦運行該命令,它的輸出保存到一個變量,然後測試變量:
x=$(ls); [ $(wc -l <<<"$x") -gt 100 ] && echo 'too many!' || printf "%s\n" "$x"
這裏,ls
輸出保存在變量$x
,則該變量作爲輸入到wc
,如果它有超過100行,則會打印一條消息。否則,變量是。
爲了完整起見,這裏是另一種安全的方法,將正確計算文件:
[ $(find -maxdepth 1 | grep -cF './') -gt 100 ] && echo 'too many!' || ls