Ich muss ein Verzeichnis anhängen PKG_CONFIG_PATH
. Normalerweise würde ich den Standard verwenden
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:$(pyenv prefix)/lib/pkgconfig
wurde aber PKG_CONFIG_PATH
bisher noch nicht auf meinem System eingestellt. Daher beginnt die Variable mit einem :
Zeichen, das sie anweist, zuerst im aktuellen Verzeichnis zu suchen. Ich möchte das nicht. Ich entschied mich für Folgendes:
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}$(pyenv prefix)/lib/pkgconfig
aber das scheint einfach so hässlich. Gibt es einen besseren Weg? Was ist der geeignete Weg, um den Doppelpunkt genau dann bedingt anzuhängen, wenn die Variable bereits festgelegt wurde?
bash
variable-substitution
scottbb
quelle
quelle
Antworten:
Sie sind mit dem
${:+}
Erweiterungsoperator auf dem richtigen Weg , Sie müssen ihn nur geringfügig ändern:Die ersten geschweiften Klammern werden erweitert
$V
und der Doppelpunkt iffV
wird bereits anderweitig auf nichts gesetzt - genau das, was Sie benötigen (und wahrscheinlich auch einer der Gründe für die Existenz des Operators).Also in Ihrem Fall:
quelle
${V}${V:+:}W
vs${V:+${V}:}W
. In jedem Fall fühlen sich beide sehr hässlich. Ich hatte auf etwas gehofft ... eleganter, denke ich?test
- so oder so, wie Sie den Wert testen und den Variablennamen zweimal schreiben, aber auf diese Weise tun Sie dies in einer einzigen Ausführungsanweisung - auf diese Weise ist es praktisch , aber ich habe noch nie einen eleganten Computer getroffen.export
. Das ist ein sehr guter Punkt, ich habe auch dieses Detail verärgert.In letzter Zeit stelle ich GNU Stow auf meine Maschinen zum Speichern von Benutzerweiten Sachen wie Bibliotheken unter
~/.local
und lief in Schwierigkeiten bei der DefinitionLD_LIBRARY_PATH
,CPATH
undLIBRARY_PATH
versehentlich einen Doppelpunkt dort setzen und so Sachen zu brechen.Dann fand ich Ihre Frage und die Antwort war nicht gerade elegant ;-), und ich schrieb eine kleine Funktion, um dies zu handhaben. Sie finden sie hier: https://gist.github.com/rico-chet/0229e4c080d9f51a02535dd25a656a8a
// bearbeitet wie von @Kusalananda vorgeschlagen
quelle
( IFS=:; set -- 1 2 3 4 5 6; echo "$*" )
join () { var=$1; shift; export "$var"="$( IFS=:; echo "$*" )"; }
${!variable:+${!variable}:}
an der richtigen Stelle hat für mich funktioniert, alle Tests bestanden. Das Finden eines geeigneten Namens ist eine Übergröße für den Leser :)