2012-01-05 11 views
1

に格納されているどのように多くの私はあなたがvariable..for例に格納されているどのように多くの変数を見つけるだろうか知りたいのですが:チェック変数は、変数

dir=$(ls) 

dirがすべてのファイルの名前を格納しますあなたはwhile-doループでそれらを循環させることができます。変数(dir)にいくつの変数(この場合ファイル名)が格納されているか知る方法はありますか?

おかげ

+2

を私は技術的に一つだけの変数( 'dir')があると思うし、それだけで長い文字列です。エントリがスペースで区切られている場合(フィールドにスペースを入れることはできません)、スペースで区切られた文字列が変数にいくつあるかを尋ねている場合は、その方法でその方法を再設定する必要があります。 :) –

+2

名前のスペースが正しく書かれたファイルを正しく処理しないため、受け入れられる答え候補として '($(ls))'を使用しないでください。つまり、配列数は実際のファイル数よりも大きくなります。代わりに '$(*)'を使って[Glennの答え](http://stackoverflow.com/a/8750198/207248)を受け入れるべきです。これは、スペースを正しく含むファイルを処理するだけでなく、 'ls'を呼び出すための外部プロセスです。 – SiegeX

+0

@SiegeX - 受け入れられた人が元の質問に答えているので(そのカウント方法)、その欠陥を編集するのは公正でしょうか?私は今そうしています。だからコメント+1。 – ArjunShankar

答えて

3

きれいな方法は、bash配列を使用することです。

dir=($(ls)) 

EDIT:追加のかっこ上記

dir=(*) 

注意:上記まだbashの配列を作成し、正しい方法、のためにグレンの回答を参照してください、適切にスペースを処理できません。すなわち、私はdirが単一の変数ではなく配列であると宣言しました。

その後、あなたは、単にディレクトリ内の要素の数(配列)を取得することができます:

echo ${#dir[@]} 

あなたは個々の要素にアクセスすることができます:ここ

echo ${dir[0]} 
echo ${dir[5]} 

詳細:http://tldp.org/LDP/abs/html/arrays.html

+0

arjunありがとう...これは私が全部探していたものでした – czchlong

+0

@czchlong - 素晴らしい!私は新しい何かを学ぶ。 – ArjunShankar

+0

「[@]」とその説明について教えてください。 – czchlong

2
ls | wc -l 

または

echo "$dir" | wc -l 

はあなたに近似を与えます。 (ファイル名は、改行が含まれているとき、それはうまく動作しません。)

ディレクトリ内のファイルの数を調べるために信頼性の高い方法が

find . -maxdepth 1 -print0 | tr '\n\0' '_\n' | wc -l 

ですが、それはlsにはない隠しファイルを、含みデフォルトではリストです。

+0

'ls -l | wc -l'は空白を含むファイル名でも動作します:) – asenovm

+0

@iLate:改行を含むファイル名ではありません。 –

+0

'echo" $ dir "| wc -l' 注意: 'dir = $(ls)'は改行文字を含むファイル名を分割します... @larsmansもっと速い;-) – olibre

5

をbashを使用すると、ディレクトリの内容を配列に集める信頼性の高い方法です

dir=(*) 

これは、スペースで正しく要素を処理します。

+0

+1これは、与えられた理由のための最良の答えです。 – SiegeX

+0

+1の配列を最初に形成する方法を修正します。 – ArjunShankar

0

Bash変数は、文字列または文字列の配列です。それ以外は何もありません。 言葉は、文字列変数に格納されているどのように多く確認するには:

$ echo "foo bar baz" | wc -w 
3 

カレントディレクトリに存在するファイルの数を把握するために、@glennは正しい考えを持っています。 任意findコマンドに一致存在するどのように多くのファイルを見つけ出すために、ちょうどこの使用:

$ find [your options] -printf x | wc -c 
関連する問題