ksh:forループは特定のディレクトリのファイルを繰り返します。

ksh:forループは特定のディレクトリのファイルを繰り返します。
schema_dir=schema_app
for SCHEMA_CHANGE in $schema_dir/*
do

したがって、私のpwdにはサブディレクトリ(など)/A/B/C/scripts があります。最初にスクリプトに渡したパラメータに応じて、各ディレクトリのファイルを繰り返すforループが必要です。schema_appschema_data

私はここで何を間違えましたか?なぜなら(ファイル名)をエコーするとSCHEMA_CHANGE以下のように表示されるからですschema_app/filename。どうやってここまでしか行けませんかfilename

答え1

あなたは何も間違っていませんでした。schema_app/filenameファイルの正しいパスです。ファイルを処理するためにコマンド(またはリダイレクト)に渡す必要があるもの。それ自体は機能しませんfilename。コマンドはどのファイルがどのディレクトリにあるかをどのように知ることができますか?

何らかの理由でディレクトリ部分なしでファイル名が必要な場合は、次のものを使用できます。

"${SCHEMA_CHANGE##*/}"

これは変数の値を取得してSCHEMA_CHANGE最後の部分まで削除するため/(または値がない場合は値を変更せずに残すため/)、ディレクトリ部分なしでファイル名を取得します。

関連情報