質問
シンプルを作成しようとしています for
ANのすべての出力を取得するループ ls
各出力を変数にコマンドして配置します。これまでのところ私は持っています
for i in ls /home/svn
do
echo $i
done
しかし、それは私にエラーを与えます。
解決
なぜなら ls
実行する必要があります:
for i in $(ls ...); do
echo $i
done
また、代わりにシェルグローブビングを検討することをお勧めします。
for i in /home/svn/*; do
echo $i
done
... また find
, 、これにより、アイテムのプロパティの非常にきめの細かい選択が可能になります。
for i in $(find /home/svn -type f); do
echo $i
done
さらに、パスのセグメントまたはファイル名自体に空白を持つことができる場合は、whileループを使用します(前の例は調整されています):
find /home/svn -type f|while read i; do
echo $i
done
while
ラインでは、空白が保存されるように読み取ります。
の召しについて basename
2つのオプションがあります。
# Call basename
echo $(basename $i)
# ... or use string substitution
echo ${i##*/}
代替を説明するには: ##
文字列から最長のフロントアンカーパターンを削除し、 #
最初のパターンマッチまで、 %%
最長のバックアンカーパターンと %
最初のバックアンカーフルマッチ。
他のヒント
使用する必要はありません ls
この場合のファイルを調べるには、以下がジョブを行います。 for i in /home/svn/*; do echo $i; done
LSコマンドの出力をiに割り当てる必要があるため、バックティックまたは$()オペレーターで囲む必要があります。
for i in $(ls /home/svn)
do
echo $i
done
そもそも間違っているからです。
for i in /home/svn/*
do
echo "$i"
done
所属していません StackOverflow