お手軽に書けるシェルスクリプトで、DSL (domain specific language) が記述できると、生産性は更に向上します。次のようなシェルの説明が記述されれたDSLを書いてみます。
database
name 'bash'
version '4.3.042-4'
desc 'The GNU Bourne Again shell'
name 'fish'
version '2.2.0-5'
desc 'Smart and user friendly shell intended mostly for interactive use'
name 'zsh'
version '5.2-1'
desc 'A very advanced and programmable command interpreter (shell) for UNIX'
DSLの定義
source
する前に定義された変数・関数は、source
されたスクリプトから呼び出せます。上のDSLを記述するために、name
、version
、desc
関数を source
する前に定義し、その後ファイル database
を source
します。
shelllist
#!/bin/sh
print_current() {
echo "${current_name} - ${current_version}"
echo "${current_desc}"
echo
}
name() {
[ -n "$current_name" ] && print_current
current_name="$*"
}
version() {
current_version="$*"
}
desc() {
current_desc="$*"
}
source ./database
print_current
version
、desc
関数では引数に渡された文字列を変数に格納します。また name
関数では変数に格納された変数を表示します。
実行結果
実行結果は次のとおりです。ここでは画面に表示しましたが、データ構造に落とすと更に柔軟にDSLを定義できそうです。
実行結果
bash - 4.3.042-4
The GNU Bourne Again shell
fish - 2.2.0-5
Smart and user friendly shell intended mostly for interactive use
zsh - 5.2-1
A very advanced and programmable command interpreter (shell) for UNIX