bashスクリプトで引数として渡されたスペースを含むフォルダーを繰り返します。

bashスクリプトで引数として渡されたスペースを含むフォルダーを繰り返します。

必要なものに近いが完全に正確ではない多数の回答を読んでおり、これを自分のニーズに合わせて調整する方法がわかりません。

ソースフォルダをパラメータとして使用し、そのフォルダ内の各ファイル(特定の種類)に対して一連の操作を実行するbashスクリプトを作成したいと思います。

src_dir=$1

for file in $src_dir/*.jpg; do
    filename=`basename "$file"`
    basename="${filename%.*}"
    ...
done

src_dir に空白がない場合は動作しますが、空白がある場合はどのように動作するかわかりません。一般的"$src_dir"に動作しますがfor file in

編集:拡張する必要がある変数を含むパスを渡すことができることを知っておく必要があります(etc $HOME$MY_PROJECT_PATH単一のティックも理想的ではありません)。

ベストアンサー1

引用符で動作しないと言って引用したとします。全体的な $src_dir/*.jpg少量。はい。*引用符で囲まれた文字列はワイルドカード文字ではなく、機能しません。

しかし、引用だけで$src_dir動作します。

src_dir=$1

for pathname in "$src_dir"/*.jpg; do
    name_noext=$( basename -- "$pathname" .jpg )
    ...
done

これ*により、シェルはそれをワイルドカード文字として使用します。

編集内容は次のとおりです。たとえば、スクリプトを呼び出すときに$HOME以下を使用しているとします。拡張HOMEリテラル文字列ではなく変数です$HOME。文字列が$HOME変数であるか、ディレクトリのリテラル名(技術的に可能であるか)を決定する必要があるなど、スクリプトが指定されたディレクトリパスにリテラル変数名が含まれているかどうかをテストする必要がある場合、これは驚くべき問題になります。これは$src_dirfor ループの拡張とは無関係です。

おすすめ記事