私はパラメータとしてディレクトリを取り込むBashスクリプトを用意しています。処理の後、そのディレクトリのファイルに基づいて出力を行います。Bashで省略可能な/(ディレクトリ区切り文字)を削除する
コマンドはdir
が
dir/foo
dir/bob
dir/haha
dir/bar
dir/sub-dir
dir/sub-dir/joe
> myscript ~/files/stuff/dir
内部に次のような構造を持つディレクトリには、いくつかの処理の後で、次のようになり、私はこの
foo
bar
sub-dir/joe
のようなものであることを出力したいのですが
渡されたパスを削除するコードは次のとおりです。
shopt -s extglob
for file in $files ; do
filename=${file#${1}?(/)}
これは私に次のようになりますが、何らかの理由でオプションの/
が処理されていません。このように、私の出力は次のようになります。
/foo
/bar
/sub-dir/joe
ユーザーが、私はそれはまだ仕事をしたいコマンド
> myscript ~/files/stuff/dir/
を実行している場合ので、私はそれはオプション作っている理由があります。そして、そのコマンドの後ろにスラッシュをつけてコマンドを実行すると、望みどおりに出力されます。
私の?(/)
はなぜ機能しないのですか?私が読んだことすべてに基づいて、それは正しい構文でなければなりません、私はいくつかの他のバリエーションも試してみました。
ありがとうございました。
'# 'は可能な限り短いものと一致するので、オプションの部分は決して含まれません。可能な限り一致させるために '##'を使うことができました –
@thatotherguy、それはうまくいきました!ああ!ドキュメンテーションでそれについて何も見ていない。それを答えにしたいのであれば、私はそれを受け入れるでしょう。 – David