As rookie

ルーキーインフラエンジニアがインフラのこと以外も結構書いてしまうブログ

POSIX1日1コマンド[part6]: basename

mokicks.hatenablog.com

詳細はこちらの記事へ。1日1POSIXコマンドを実行してみようというやつです。

basename

basename

とりあえず使ってみる

$ ls
a.txt
$ basename a.txt 
a.txt
# suffixを指定
$ basename a.txt .txt
a
$ pwd        
/home/vagrant/shells/006
$ basename `pwd`
006
$ ps aux | grep chronyd                                  
chrony     556  0.0  0.3 115640  1776 ?        S    Feb25   0:00 /usr/sbin/chronyd
vagrant   3805  0.0  0.1  12448   676 pts/0    R+   04:05   0:00 grep --color=auto chronyd ps aux | grep chronyd                                  

$ ps aux | grep chronyd | awk '{ print $11 }' | head -n 1
/usr/sbin/chronyd

$ basename $(ps aux | grep chronyd | awk '{ print $11 }' | head -n 1)
chronyd

ざっくり使い方

basename string [suffix]

ざっくりDESCRIPTION

パス名のディレクトリじゃない部分を返す。文字列のオペランドXBD pathname で定義されているパス名として扱われる。 文字列は、文字列中の最後のパス名に対応するファイル名に変換され、その後に接尾辞文字列接尾辞があればそれを削除するものとする。これは、次のステップに相当するアクションを順番に実行することによって行われます。

  1. stringがヌル字列の場合、結果の文字列が '.'かどうかは不明です。もしくは、ヌル文字列です。いずれの場合も、手順2〜6はスキップしてください。
  2. stringが"//"の場合、ステップ3〜6がスキップされるか処理されるかどうかは、実装定義である。
  3. stringが全てスラッシュで構成されている場合、文字列は単一のスラッシュ文字に設定されます。この場合は、手順4〜6をスキップしてください。
  4. stringの最後にスラッシュがある場合、それらは削除される
  5. stringにスラッシュが残っている場合、文字列中の最後のスラッシュまでの文字列の接頭辞は削除されます。
  6. suffixスオペランドが存在し、stringに残っている文字と同一ではなく、stringに残っている文字のsuffixと同じである場合、接尾辞,suffixは文字列から削除されます。それ以外の場合、このステップでは文字列は変更されません。文字列に接尾辞が見つからない場合は、エラーとみなされません。
補足資料

suffix(サフィクス)

ざっくりOPTION

なし

ざっくりOPERANDS

basename <string>
basename <suffix>

ざっくりまとめ

パスを渡すと最後パスの最後の部分を抜き出してくれる。
正直basenameをいつ使うのか思いつきません。
いっぱいパス処理しないといけなくて、かつ拡張子が不必要な場合とかに使えるだろうか。
== 活用方法募集中 ==