コード日進月歩

しんくうの技術的な小話、メモ、つれづれ、など

bashで環境変数をexportせずにシェルスクリプトを実行したい場合はコマンドの前に記述することで代替できる

実は最近まで知らなかったのでメモ。

環境

$ bash --version
GNU bash, version 3.2.57(1)-release (x86_64-apple-darwin17)
Copyright (C) 2007 Free Software Foundation, Inc.

やり方と例

こんな感じでシェルスクリプトを用意する

$ cat test.sh
echo hoge is $HOGE .

HOGE に何も設定されていないので実行すると何も出ない

sh test.sh
hoge is .

コマンド実行前に文を入れると成立する

$ HOGE="Set All Right" sh test.sh
hoge is Set All Right .

複数設定もできる

$ cat test.sh
echo hoge is $HOGE . huga is $HUGA
$ HOGE="Set All Right" HUGA="xxx" sh test.sh
hoge is Set All Right . huga is xxx

ただし実行するシェル自体には反映されないので注意、下記の例だとセットされていないので何も出ないことがわかる。

HOGE="Set All Right" echo hoge is $HOGE
hoge is

参考リンク

シェル 一時的な環境変数を渡す方法csh/tcsh/sh/zsh/bash - sh系だけでほかは書き方が違う