Ich möchte Folgendes in fish
der Shell verwenden:
$ export arm='ARCH=arm CROSS_COMPILE=arm-eabi-'
$ make $arm
Das funktioniert gut, bash/zsh
abernichtauf fish
der Schale.
Aber wenn ich Folgendes in fish
der 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 $arm
exportieren müssen , weil diese Variable keinen Gebrauch macht.arm
make
make
$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