シェル変数にコマンドを入れて使うのは「あり」ですか?
Q&A
Closed
最近シェルスクリプトの勉強を始めた初心者です。
なお、使用しているシェルはBashです。
以下のように、シェル変数にコマンド(正確には実行ファイルのパス)を格納して、そのシェル変数を呼び出すというのは、書き方として「あり」でしょうか。
#!/usr/bin/env bash
myexe=/my/dir/myexe
# 略(cdしたり他のコマンド実行したりしてます)
$myexe 1234 abcd > result1.out
# 略(また他のコマンドをいろいろ実行してます)
$myexe 5678 efgh > result2.out
現時点では個人的にあまり慣れない書き方なのですが、シェルスクリプトとしてはこれは普通の書き方ですか?
それとも、避けるべき書き方でしょうか。
避けるべきというのは、ほかの言語でいう「何もかもグローバル変数にするのはよくないよね」とか「1つの関数が余りにも巨大になるのは避けたいよね」くらいの意味合いで捉えていただけると助かります。
ググってみても、「そういう書き方はやめましょう」という情報が見当たらない一方で、シェル変数にコマンドを入れているコード例もあまり見つからず、判断に困っています。
自分で思いついた代替案としては、
- シェル関数にする
- expand_aliasesの設定が必要だが、aliasにする
- PATHに:/my/dirを追記する(わざわざシェルスクリプト内でやらずとも~/.bash_profile内で追記すればいいのですが、今回はそれはなしで)
くらいでした。
PATHに追記する方法だと/my/dir内のmyexe以外のファイルも直に参照できるようになるので厳密には同等な代替手段ではありませんが、ひとまずそれは置いておきます。
シェル変数にコマンドと入れる方法と比較して、これらの方法はどうでしょうか。
今回のmyexeのようなケースの場合、どの書き方が好ましいと思いますか?
シェル変数を使う方法は記述が非常に簡単に済む点は気に入っているのですが…