0

これは私の最初の Bash スクリプトなので、この質問が些細なことでしたらご容赦ください。指定したディレクトリ $HOME/.junk 内のファイル数をカウントする必要があります。これは簡単だと思い、次のように動作すると想定しました。

numfiles= find $HOME/.junk -type f | wc -l
echo "There are $numfiles files in the .junk directory."

コマンドラインでの入力find $HOME/.junk -type f | wc -lは、ファイルの数を返すだけで、期待どおりに機能します。スクリプト内に入力すると、これが機能しないのはなぜですか? ユーティリティにオプションを渡す際に、特別な表記法が欠けていますか?

お時間をいただき、ありがとうございました。

4

3 に答える 3

5

バックティックで囲むだけです。

numfiles=`find $HOME/.junk -type f | wc -l`

これの用語はコマンド置換です。

于 2010-04-04T14:45:15.373 に答える
4

bash を使用している場合は、次のようにコマンド置換に $() を使用することもできます。

numfiles=$(find $HOME/.junk -type f | wc -l)

これは、逆引用符よりもわずかに読みやすく、複数のコマンドを相互にネストできることがわかりました。

于 2010-04-04T14:58:37.423 に答える
1

bash 4 を使用 (再帰が必要な場合)

#!/bin/bash
shopt -s globstar
for file in **
do
 ((i++))
done
echo "total files: $i"

そうでない場合

#!/bin/bash
shopt -s dotglob
shopt -s nullglob
for file in *
do 
  ((i++))
done 
echo "total files: $i"
于 2010-04-04T15:08:18.773 に答える