Bash変数から最後のスラッシュの前のすべてのエントリを削除します。

Bash変数から最後のスラッシュの前のすべてのエントリを削除します。

myVarbashには、次の長い文字列を含む変数があります。

-rw-rw-rw- root/root 16 2018-02-12 10:03 foo_tar/baz1234_

myVar最後のスラッシュ以前のすべてを削除したい(最後のスラッシュを含む)myVar最終的には保存されますbaz1234_。すべてを削除して結果を変数に保存するにはどうすればよいですか?

私はsedを扱う解決策を見つけましたが、その解決策はファイル処理を扱っているので、それは私の問題です。

ベストアンサー1

使用する必要がありますbash パラメータ拡張これには、型の部分文字列の削除を使用します。${PARAMETER##PATTERN}

最初から -${PARAMETER##PATTERN}

この形式は、一致しようとしている文字列の先頭に記載されているパターンを削除します。彼らは##最長のテキストマッチングを使用してこれを実行しようとします。

あなたの例

$ myVar='-rw-rw-rw- root/root 16 2018-02-12 10:03 foo_tar/baz1234_'
$ echo "${myVar##*/}"
baz1234_

コメントで指摘したように、問題の文字列はls変数内のコマンドの出力であるようです!これはスクリプトを書くのに理想的な方法ではありません。要件をより明確に説明します。

おすすめ記事