私はいつもパラメータを使ってシェルスクリプトを開発しました。これは、日常的に、あるいはいくつかの自動化スクリプトを開発しているときでもあります。しかし、最近私はスクリプトに環境変数をエクスポートする別のアプローチを試みました。パラメータを使用するか、環境変数をエクスポートする必要がありますか?
#!/bin/bash
: ${USER?"Requires USER"}
: ${FIRST_NAME?"Requires FIRST_NAME"}
: ${LAST_NAME?"Requires LAST_NAME"}
: ${EMAIL?"Requires EMAIL"}
set -x
setup_git_account(){
su - "${USER}" -c "git config --global user.name '${FIRST_NAME} ${LAST_NAME}'"
su - "${USER}" -c "git config --global user.email '${EMAIL}'"
}
setup_git_account
これは、小さなコードを保証し、必要なすべての変数が初期化され、また、スクリプトが何をしているかをよりよく理解するには、いったんすべての変数が外に宣言されている場合は簡単にチェック。
パラメータを受信して実装されている場合、次のように表すことができるexport USER='john' && export FIRST_NAME='John' && export LAST_NAME='Doe' && export EMAIL='[email protected]' && setup_git_account.sh
:
setup_git_account.sh --user 'john' --firstname 'John' --lastname 'Doe' --email '[email protected]'
しかし、最後の1は、渡されたパラメータをチェックし、getopts
スイッチケースを実装するコードの方法より多くの行が必要になります値など。
とにかく、私は2番目のアプローチに慣れていることを知っていますが、私は最初のアプローチにもいくつかの利点があると思います。提示されたアプローチの間に不利な点がある場合、私はあなたからもっと多くのことを聞きたいと思います。そして、どちらを使うべきですか?
ありがとうございます!
環境変数を使用すると、すべてが明示的に設定されていないと予期しない動作が発生する可能性が高くなります。これらはシステム、あなたのbashrc、前に実行したスクリプトなどによって(偶然に)設定できます。 – hasufell
パラメータの使用をお勧めします – hek2mgl
小文字の変数名を使用してください。特に 'USER'は既に使用されていて、あなたの環境に既に*設定されています。 – chepner