【ShellScript】/bin/sh スクリプトのメモ

/bin/sh シェルに関するメモ

基本的な実装は習得済みだが、時々目にしたことが無い処理方法に出会すのでそれらを記録に残しておく。
 

 

拡張子のみの取得方法

Ubuntu 18.04 の /bin/sh = /bin/dash で動作確認済み。
以下のスクリプトを実行すると、結果は「fish」となる。

#!/bin/sh
b=/home/neko/.config/fish/init.fish
ext=`echo ${b##*.}`

 

参考にしたサイト
ファイルパスからファイル名や拡張子を自由に取り出す - ザリガニが見ていた...。
 

補足

${変数#パターン}	先頭から最短一致した部分を取り除く
${変数##パターン}	先頭から最長一致した部分を取り除く
${変数%パターン}	末尾から最短一致した部分を取り除く
${変数%%パターン}	末尾から最長一致した部分を取り除く
ファイルパスからファイル名や拡張子を自由に取り出す - ザリガニが見ていた...。

 
 

basenameコマンドによる拡張子削除方法

参考にしたサイト
ファイルパスからファイル名や拡張子を自由に取り出す - ザリガニが見ていた...。

通常の basename の使い方。

% basename /home/neko/.config/fish/config.fish 
config.fish

 
basename に第2引数を与えてやると、拡張子部分を削除する

% basename /home/neko/.config/fish/config.fish .fish
config


man basename をしてみると以下のようにあった。
「-s」を付けて拡張子を削除してやる方がわかりやすいのかも知れない。

Usage: basename NAME [SUFFIX]
  or:  basename OPTION... NAME...
NAME から前にある全てのディレクトリ部分を取りのぞいた名前を表示します。
指定があれば、末尾の SUFFIX も取り除きます。

Mandatory arguments to long options are mandatory for short options too.
  -a, --multiple       複数の NAME 引数をサポートし、各 NAME に処理を行う
  -s, --suffix=SUFFIX  接尾辞 SUFFIX を削除する。暗黙的に -a が使用される
  -z, --zero           各出力を改行ではなく NUL で区切る
      --help     この使い方を表示して終了する
      --version  バージョン情報を表示して終了する

例:
  basename /usr/bin/sort          -> "sort"
  basename include/stdio.h .h     -> "stdio"
  basename -s .h include/stdio.h  -> "stdio"
  basename -a any/str1 any/str2   -> "str1" followed by "str2"

GNU coreutils online help: <http://www.gnu.org/software/coreutils/>
basename の翻訳に関するバグは <http://translationproject.org/team/ja.html> に連絡してください。
Full documentation at: <http://www.gnu.org/software/coreutils/basename>
or available locally via: info '(coreutils) basename invocation'