2013-04-30 10 views
12

Sto usando bash.Un liner per impostare la variabile di ambiente se non esiste, altrimenti aggiungere

C'è una variabile d'ambiente che voglio neanche accodare se è già impostato come:

PATH=$PATH":/path/to/bin"

Oppure, se non è già presente voglio impostare semplicemente:

PATH="/path/to/bin"

Esiste una dichiarazione a una riga per eseguire questa operazione?

Ovviamente la variabile di ambiente PATH è praticamente sempre impostata ma è stato più semplice scrivere questa domanda con.

risposta

14
PATH=${PATH}${PATH:+:}/path/to/bin 
  • ${PATH} viene valutato come nulla se PATH non è impostato/vuota, altrimenti restituisce il percorso corrente
  • ${PATH:+:} viene valutato come nulla se PATH non è impostata, altrimenti restituisce ":"
+0

Preferisco questa risposta in quanto è un po 'più chiaro. Grazie – Cheetah

+0

Questa sintassi è nota come espansione dei parametri Shell e la documentazione completa su questa funzione è disponibile nella [man page] (https://www.gnu.org/software/bash/manual/bashref.html#Shell-Parameter- Espansione). – davidjb

+0

Qual è l'equivalente csh a questo con 'setenv'? – Spade

16

Un piccolo miglioramento sulla risposta di Michael Burr. Questo funziona con set -u (set -o nounset) così:

PATH=${PATH:+$PATH:}/path/to/bin 
+0

Qual è l'equivalente csh di questo? – Spade

Problemi correlati