So legen Sie mehrere Parameter in einer einzelnen Umgebungsvariable in der Fish-Shell fest und verwenden sie

So legen Sie mehrere Parameter in einer einzelnen Umgebungsvariable in der Fish-Shell fest und verwenden sie

Ich möchte Folgendes in fishder Shell verwenden:

$ export arm='ARCH=arm CROSS_COMPILE=arm-eabi-'
$ make $arm 

Das funktioniert gut, bash/zshabernichtauf fishder Schale.

Aber wenn ich Folgendes in fishder Shell ausführe:

$env tmp=arm make

das funktioniert gut.

Kann mir bitte jemand dabei helfen?

Antwort1

Du schaust nach set -x:

set -x arm 'ARCH=arm CROSS_COMPILE=arm-eabi-'

Sehen Sie sich dieTutorialabschnitt zu Umgebungsvariablenfür mehr.

Antwort2

In sh/ bash:

export arm='ARCH=arm CROSS_COMPILE=arm-eabi-'
make $arm

Das ergibt nicht wirklich Sinn. Umgebungsvariablen sind als Variablen gedacht, an die übergeben wird make(ein Verweis auf $(arm) im Makefile beispielsweise wird also auf dessen Inhalt erweitert). Umgebungsvariablen sind skalar, sie können nur einen String-Wert enthalten. Oben verlassen Sie sich auf den Operator split+globder Schaledas die Variable in Wörter aufteilt, die make(als Argumente) übergeben werden.

Wird aber von der Shell erweitert, sodass Sie nicht in die Umgebung $armexportieren müssen , weil diese Variable keinen Gebrauch macht.armmakemake$arm

Außerdem wäre es auf einer Shell, die dies unterstützt, sinnvoller, Arrays zu verwenden. In bash/ zsh/ ksh:

arm=(ARCH=arm CROSS_COMPILE=arm-eabi-)
make "${arm[@]}"

Mit fish:

set arm ARCH=arm CROSS_COMPILE=arm-eabi-
make $arm

Mit rc/ es/ zsh:

arm=(ARCH=arm CROSS_COMPILE=arm-eabi-)
make $arm

verwandte Informationen