Bashスクリプト分割エラー

Bashスクリプト分割エラー

私はディレクトリを読み込み、その中にあるすべてのファイル(すべてのサブディレクトリを含む)のファイル形式を返すbashスクリプトを書くことを任命しました。 find コマンドは許可されません。これを達成するために2つのforループを試しましたが、分割エラーが発生しました。しかし、サブディレクトリなしでディレクトリを渡すと、スクリプトが機能することがわかりました。愚かな奴のコードを見て、何が間違っているのか教えてくれる人がいますか?とても感謝しています。

#!/bin/bash
func () {
for name in $1
do
  if [ -f "$name" ]
  then
    file "$name"
  elif [ -d "$name" ]
  then
    func "$1"
  fi
done
}

directory="$1/*"
for name in $directory
do
  if [ -f "$name" ]
  then
    file "$name"
  elif [ -d "$name" ]
  then
    func "$1"
  fi
done

ベストアンサー1

処理中の ""がディレクトリの場合は、元の引数ではなくその内容$nameで呼び出す必要があります。それ以外の場合は無限ループが発生し、セグメントが発生します。func

元のパラメータに関数を使用し、その関数を各項目に個別に適用すると、コードを大幅に削減できます。とにかく、今では身体機能で何が起こるのかを繰り返しています。

#!/bin/bash
func () {
    local arg="$1"
    if [[ -f "$arg" ]] ; then
        file -- "$arg"
        return
    fi
    if [[ -d "$arg" ]] ; then
        for file in "$arg"/* ; do
            func "$file"
        done
    fi
}

func "$1"

おすすめ記事