2

良い一日、私はパスのサブフォルダ/ディレクトリの1つのレベルを読み取るためのスクリプトを作成しています。スクリプトは次のようになります。

#loopdir.sh
for i in `ls -d $1`
do
echo $i
done

しかし、これを使用して/ media / My \ Passport /を読み取ろうとすると、引数が2つの異なるdirとして読み取られます。

$ ./loopdir.sh /media/My\ Passport/
ls: cannot access /media/My: No such file or directory
Passport/
4

3 に答える 3

5

代わりにこれを試してみてください(私の理解では、サブディレクトリをリストしたいのですが、私は正しいですか?):

for i in "$1"/*; do
    echo "${i%/}"
done

ls出力を解析することは悪い考えです:それはファイル情報をインタラクティブに見るためのツールです。その出力は人間向けにフォーマットされており、スクリプトにバグが発生します。代わりにグロブを使用するか、検索してください。理由を理解する:http://mywiki.wooledge.org/ParsingLs

そして(最後になりましたが):より 多くの見積もりを使用してください!それらは不可欠です。また、「」と「」および「」の違いについても学びます。http: //mywiki.wooledge.org/Quotesおよびhttp://wiki.bash-hackers.org/syntax/wordsを参照してください。

于 2013-02-28T09:11:31.823 に答える
1

$i引用符で囲む必要があります。echo "$i"

于 2013-02-28T08:55:53.927 に答える
0

$iしないでください

これはスペースで壊れます

「$i」を使用

于 2013-02-28T09:32:46.473 に答える