シェルスクリプト(zshなど)にいくつかの変数があるとします。
FOLDER_1, FOLDER_2, etc.
これらの変数は、から派生するフォルダーを参照します/
。たとえば、パスがある場合/home/me/stuff/items
変数は次のとおりです。
FOLDER_1='home'
FOLDER_2='me'
FOLDER_3='stuff'
ここで、変数を連結して対応するパスを構築し直したいとします。可能な方法の1つは、次のようにパスを作成することです。
PATH=$FOLDER_1/$FOLDER_2/$FOLDER_3/
ただし、変数の中にはFOLDER_i
スラッシュが付いているものもあれば、付いていないものもあると言う(そして、どれがわからないのか)
FOLDER_1='home'
FOLDER_2='stuff/'
FOLDER_3='items'
私の質問は次のとおりです。どうすればパスを堅牢に構築できますか?(たとえば、二重スラッシュを避け、必要な場所に追加します)。
これを行う1つの方法は/
、変数のペア間に常に追加し、で重複を削除することsed
だと思いましたが、それを動作させることはできません(私はで/
正しく処理しているかわかりませんsed
)。
また、私は車輪を再発明していますか?(つまり、すでにこれを行う組み込み機能はありますか?)。
最後に、変数が配列内にある場合、たとえばFOLDERS
、ループせずにこれを行うことは可能ですか?(または、ループFOLDERS
内にあるが、配列内にいくつあるかを知らずに)。
%
方法は、クエストで言及された単一の末尾のスラッシュに対して機能します。複数のスラッシュがある場合に対応するために${parts[@]%%/*}
動作します。ここではスラッシュ問題についてもう少し情報へのリンクです:ダブルスラッシュは、UNIXパスで何を意味するのですか?'cd dir / subdir //は有効ですか