シェル変数の切り替え/マクロ/xargsなど

シェル変数の切り替え/マクロ/xargsなど

だから私はクロスコンパイルをたくさんし、しばしばこのようにタイピングしたりしました。

FOO=bar command --some-args
BAZ=qxt other-command --other-args

しかし、実際のシェル変数は非常に長く、入力するのが面倒です。 Bashは動的言語ではないため、バックティックは機能しません(FOO = barコマンドを実行しようとしました)。 xargsは間違っていますが、コマンドが評価される前に同様の操作を実行することをお勧めします。環境変数に必要なシェル変数を設定すると、コマンドの前にバックティックと同じ問題が発生します。毎回明示的にenvを変更すると、質問を入力して楽しさも加わります。私の将来の環境を汚染します。 pushenvとpopenvに似たものはありますか?

短いハンドルで必要なすべてのシェル変数を保存して検索して、次のことを行う方法はありますか?

shellvars1 command --some-args
shellvars2 other-command --other-args

シェル変数のさまざまな組み合わせは大きくても制限されているため、ヘルパースクリプトにオフロードする方法がある場合は、一度に入力できますが、それを行う方法はありません。

ボーナスポイント:bashにはtcshに似た機能はありますか?

!24:s/FOO/BAZ/

これも役に立ちます(ただしそれほど多くはありませんが)。私は主にスペルミスで超自然的な力を誇示する機会を取り除きたかった。

ベストアンサー1

シェル変数が何であるかについて少し混乱しているようです。投稿のすべての変数はシェル変数ではなく環境変数です。シェル変数を設定します。

foo=bar

環境変数を設定するには、次の手順に従ってください。

export FOO=BAR

(またはcシェルのsetenv)。しかし、

FOO=BAR command

直観に反して、割り当ては以前とは異なる意味を持ち、環境変数はコマンド環境でのみ設定されます。つまり、この単純なスクリプトは必要なタスクを実行する必要があります。

#!/bin/bash
VAR1=VAL1 ... VALN=VARN "$@"

追加の質問については:私はbashがこれを行うことはできないと思いますが、zshは素晴らしくそれをすることができます。両方

^FOO^BAR

そして

!!:s/FOO/BAR/

特定の例では、同じ効果で次のことを行います。

!24:s/FOO/BAR/

おすすめ記事