.txt
ファイルを読み取り、結果をどこかに保存するスクリプトを作成しています。
表現を減らす必要があります。
str1/str2/str3/str4/str5
私はただ必要です。str5
上の内容です。
ループから1行ずつファイルを読み込んでいますwhile
。
そのような文字列を減らすには?
ベストアンサー1
このbasename
ユーティリティは、パス名のファイル名部分を返します。文字列をパス名として処理すると、次のものが返されますstr5
。
string=str1/str2/str3/str4/str5
basename -- "$string"
上記の出力はstr5
。これは$string
、改行文字が含まれている場合、または次から始まる場合にも機能します-
。
string='-str1/str2/str3/str
4/str5'
basename -- "$string"
結果をbasename
変数に保存することは、一般的なコマンド置換によって行われます。
newstring=$( basename -- "$string" )
しかし、コマンドの置き換え巻きみんな末尾の改行文字:行区切り文字として出力される文字ですが、末尾にbasename
ある改行文字も含まれます$string
。
これはPOSIXシェルの演算子を使用して回避することができます${var##pattern}
(また、プロセスをフォークし、別のコマンドを実行することを節約できます)。
string='very/
strange
file name
'
newstring=${string##*/}
ただし、s のよう$string
な他の値を提供します。/
/some/dir/