0

私はLinuxシェルスクリプトを初めて使用し、キーボードから渡されるフォルダーパスのサイズを取得するために次の変数を設定しようとしています。オプションが無効であるというエラーが表示され続けます。T

誰かが私が間違っていることを教えてもらえますか?「size」変数を削除してそのままにしておくと、エラーは消えます。

ありがとう!

#!/bin/bash 
echo -e "\nEnter the first directory (relative path)"
read dir1

size=find $dir1 -type f | wc -l 

 echo $size
4

1 に答える 1

3

そのはず:

size=$(find $dir1 -type f | wc -l)

表記を使用する$()ということは、コマンドを実行してその出力を行に配置する必要があることを意味します。

これは、変数にリテラルテキスト値が割り当てられているためです。

myvar=foo

文字列「foo」をmyvar変数fooの値やfooコマンドの結果ではなく入れます。

myvar=$foo

変数の値をに入れfooますmyvar。と

myvar=$(foo)

コマンドを実行した結果をfoomyvarに入れます。

コマンドを実行する前に変数値を割り当てることができるシェル構文の特別な部分があり、それらの変数値はその1つのコマンドに対してのみ設定されます。次のようになります。

x=foo1 y=foo2 command parameter ...

あなたがあなたの行を書いた方法

size=find $dir1 -type f | wc -l 

size「find」の値が割り当てられ、次に

$dir1 -type f  # this won't be a valid command

別のコマンドとして実行されます。

于 2013-03-25T05:44:38.677 に答える