1

この方法でファイル名を取得する理由を説明してくれる人が親切に教えてくれますか? 例: ファイルは次のとおりです。

fileName = "/Users/test/am01/output/output.log"
fileName=${fileName##*/}

それから私たちは得ました

fileName = output.log

#* が何を意味するのか説明してくれませんか? この正規表現についてとても混乱しています。

さらに、次のような別の例があります。

filename="testdata.done"
echo ${filename%.done}
then we got test data

% とはどういう意味ですか? この正規表現は見たことがありません。

4

2 に答える 2

1

これは reqexp ではなく、昔ながらの bash マジックです。このガイドには次のように書かれています。

${string##substring}

$string の前から $substring の最長一致を削除します。

星印はここではワイルドカードであるため、*/で終わる最長の部分文字列を削除することを意味し/ます。

つまり"/Users/test/am01/output/"、あなたの場合。

あなたの質問のパートb:

${string%substring}

$string の後ろから $substring の最短一致を削除します。

于 2013-06-24T23:35:29.943 に答える
1

これは正規表現ではありません!

これは BASHパラメータ展開です。その参照から:

接頭辞と接尾辞を削除するための拡張もあります。${VAR#pattern} の形式は、展開された値からパターンに一致するすべてのプレフィックスを削除します。削除されたプレフィックスは、一致する最も短いプレフィックスです。二重のポンド記号/ハッシュマークを使用すると、一致する最も長いプレフィックスが削除されます。同様に、${VAR%pattern} の形式は、一致する接尾辞を削除します (接尾辞が最も短い場合は 1 パーセント、長い場合は 2 パーセント)。

于 2013-06-24T23:37:36.857 に答える