以下の文字列からパス位置を抽出する方法。
/opt/oracle/app/oracle/product/12.1.0/bin/tnslsnr
期待される出力。
/opt/oracle/app/oracle/product/12.1.0/bin
(または)
/opt/oracle/app/oracle/product/12.1.0/bin/
答え1
シェルのサフィックス除去機能の使用
str=/opt/oracle/app/oracle/product/12.1.0/bin/tnslsnr
path=${str%/*}
echo "$path"
一般的に${parameter%word}
。私たちの場合、最後のスラッシュと次の文字の両方を削除しようとしています。word
parameter
/*
上記の結果は次のとおりです。
/opt/oracle/app/oracle/product/12.1.0/bin
ディレクトリ名の使用
ディレクトリ名パスから最後のコンポーネントを削除するために使用できます。
$ dirname -- "$str"
/opt/oracle/app/oracle/product/12.1.0/bin
答え2
start cmd:> dirname "/opt/oracle/app/oracle/product/12.1.0/bin/tnslsnr"
/opt/oracle/app/oracle/product/12.1.0/bin
file_path="/opt/oracle/app/oracle/product/12.1.0/bin/tnslsnr"
dir_path_woslash="${file_path%/*}"
echo "$dir_path_woslash"
/opt/oracle/app/oracle/product/12.1.0/bin
shopt -s extglob
dir_path_wslash="${file_path%%+([^/])}"
echo "$dir_path_wslash"
/opt/oracle/app/oracle/product/12.1.0/bin/