🖥
シェルの偽装 — 条件判定 ( if / then / fi ) は実はコマンドの連続に過ぎないので独自構文に書き換えてみるテスト
参考
こちらの記事に触発されて書いてみる。
プログラマーの君! 勘違いするな! シェルスクリプトでは読みやすさのためにスペースを置くな!! という話 - Qiita
シェルスクリプトは「コマンド列を書き連ねたもの」だという原則を忘れないで!
fi を end で書けるように
fi は構文ではなくコマンドだ。
なのでエイリアスを作ることも出来る。
スクリプト例
overwrite.sh
#!/bin/sh
alias end=fi
if [ true ]; then
echo ok
end # 本来なら fi のはず
ちなみに shebang が sh なのは、無設定で alias
を使うため。
shebang を bash にした場合は shopt -s expand_aliases
を記載すること。
実行結果例
ok
もっと書き換えてみる
#!/bin/sh
alias when=if
alias end=fi
alias so=then
when [ true ]; so
echo ok
end
[
]
は書き換えられないの?
工夫したら出来るような気もするが試してない。
開きカッコのコマンド ( [
) は、引数に閉じカッコ ( ]
) を期待するので、こちらも中身の処理まで変える必要がありそう。
参照先の記事にもあるが、 [
はコマンド。だが ]
は引数の文字列だ。コマンドではない。似たように見えて違う奴ら。
$ which [
[: shell built-in command
$ which ]
] not found
チャットメンバー募集
何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。
公開日時
2018-07-16
Discussion