[解決済み] 環境変数の指定とエコーを同じコマンドラインで実行できないのはなぜですか?
2022-12-01 05:14:40
質問
このスニペットを考えてみましょう。
$ SOMEVAR=AAA
$ echo zzz $SOMEVAR zzz
zzz AAA zzz
ここでは
$SOMEVAR
を
AAA
に変更し、2 行目でそれを echo したら、次のようになります。
AAA
の内容が期待通りに表示されます。
しかし、その後に、同じコマンドラインで変数を指定しようとすると
echo
:
$ SOMEVAR=BBB echo zzz $SOMEVAR zzz
zzz AAA zzz
... 私は
BBB
は表示されず、古い値 (
AAA
).
こんな感じでいいんでしょうか?もしそうだとしたら、どうしてこうして
LD_PRELOAD=/... program args ...
のように変数を指定すると、うまくいくのでしょうか?私は何を見逃しているのでしょうか?
どのように解決するのですか?
あなたが見たものは、期待された動作です。 問題は、親シェルが
$SOMEVAR
を評価することです。 あなたは
$SOMEVAR
の評価を環境が設定された後まで延期させる必要があります。
当面のオプションは以下の通りです。
-
SOMEVAR=BBB eval echo zzz '$SOMEVAR' zzz
. -
SOMEVAR=BBB sh -c 'echo zzz $SOMEVAR zzz'
.
これらは両方ともシングルクォートを使って、親シェルが評価するのを防ぎます。
$SOMEVAR
が環境に設定された後にのみ評価されます (一時的に、単一コマンドの間だけ)。
もう一つの選択肢は、サブシェル表記を使うことです (これもまた Marcus Kuhn が提案したものです。 回答 ):
(SOMEVAR=BBB; echo zzz $SOMEVAR zzz)
変数はサブシェルにのみ設定される
関連
-
[解決済み] Bashでコマンドの出力に変数を設定するにはどうすればよいですか?
-
[解決済み] Git上でシェルコマンドを実行する際に使用するSSH-keyの秘密鍵を指定する方法は?
-
[解決済み] コマンドラインから .bash_profile を再読み込みする方法は?
-
[解決済み] コマンドラインからすべての環境変数をリストアップ
-
[解決済み] コマンドラインからの 'git commit -m' に改行を追加する
-
[解決済み] Windowsのコマンドプロンプトから環境変数を更新するコマンドはありますか?
-
[解決済み] Mac OS X Lionで環境変数を設定する
-
[解決済み] シェルスクリプトからエコーを使わずにパスワードを取得する方法
-
[解決済み] Bashでコマンドの前に環境変数を設定すると、パイプ内の2番目のコマンドで動作しない
-
[解決済み] bashでスクリプトの中で宣言された変数をリストアップする方法は?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] Git のコマンドライン・インターフェイスの言語を変更するにはどうしたらよいですか?
-
[解決済み] Makefileでシェルコマンドを使用する方法
-
[解決済み] bashでWebサーバーの応答を待つループを作成するには?
-
[解決済み] Ansibleで新しいユーザーとパスワードを作成する
-
[解決済み] bashを使って関数の出力を変数に代入するにはどうすればよいですか?
-
[解決済み] Docker: 実行中のDockerコンテナの停止と削除
-
[解決済み] MSYSでフォルダを閲覧する
-
[解決済み] ループ内でユーザー入力を読み取る
-
[解決済み] Bashの引数で引用符を維持するには?重複
-
[解決済み] グレースフル・シャットダウンプロセスのシグナルはどのような順番で送ればよいのですか?