linux:bashtips

Bash Tips

シェルスクリプトというか、新し目のbash(4.x以降)対象のTipsを集めます。

スペース区切りの文字列がある変数の最初と最後の言葉を切り出す。

VAR="foo bar buzz"
 
# 変数の最初の言葉だけ切り出す
$ echo ${VAR%%■*} # ■はスペース
foo
 
# 変数の最後の言葉だけ切り出す
$ echo ${VAR##*■} # ■はスペース
buzz

拡張子だけ取り出す場合も、最後の言葉を切り出すの応用で「.」(ドット)区切りと考えると同じように切り出せる。 (拡張子より前の部分は、basenameやdirnameで切り出せます。)

# 拡張子だけ取り出す
VAR="hogefuga.mp4"
$ echo ${VAR##*.}
mp4
パラメータ展開を使っています。
# パターンに後方一致した部分を取り除く。
${parameter%word}
${parameter%%word} # (最長一致の場合)
# パターンに前方一致した部分を取り除く。
${parameter#word}
${parameter##word} # (最長一致の場合)

最初の1文字を切り出すのは、変数の特定の位置から指定した文字数を切り出す「部分文字列展開」を使うと簡単。 最後の1文字を切り出す場合は「部分文字列展開」に、変数の文字数を返す「パラメータの長さ」、exprを使わず計算ができる「算術式展開」を組み合わせて、文字列長-1の位置を指定してやれば、変数の最後の1文字を切り出せる。

# 先頭の1文字を切り出す
$ STR="abcdefg"; echo ${STR:0:1}
a
 
# 最後の1文字を切り出す
$ STR="abcdefg"; echo ${STR:$((${#STR}-1))}
g
特定の文字列の位置(offset)から、lengthを取り出す。
部分文字列展開
${parameter:offset:length} 

文字列の長さを返す。

パラメータの長さ
${#parameter} 

計算をする

算術式展開
$((expression)) 

bash 4.xから連想配列(ハッシュ)が使えます。

$ declare -A nhk
$ nhk[fm]="NHK-FM"; echo ${nhk[fm]} #変数はチルダで囲む
NHK-FM

一気に代入する場合はこんな感じ。

$ declare -A nhk
$ nhk=([r1]="NHK第1ラジオ" [r2]="NHK第2ラジオ" [fm]="NHK-FM"); echo ${nhk[r1]}
$ echo ${nhk[r2]}
NHK第2ラジオ
 
# バリューの一覧
$ echo ${nhk[@]}
NHK第2ラジオ NHK第1ラジオ NHK-FM
 
# キーの一覧
$ echo ${!nhk[@]}
r2 r1 fm
  • linux/bashtips.txt
  • 最終更新: 2013/01/29 05:52
  • by nogajun