質問

シンプルを作成しようとしています 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
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top