Saya perlu menambahkan direktori ke PKG_CONFIG_PATH
. Biasanya, saya akan menggunakan standar
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}:$(pyenv prefix)/lib/pkgconfig
tetapi PKG_CONFIG_PATH
belum diatur sebelumnya pada sistem saya. Oleh karena itu, variabel dimulai dengan :
karakter, yang memerintahkannya untuk mencari di direktori saat ini terlebih dahulu. Saya tidak menginginkan itu. Saya memutuskan hal berikut,
export PKG_CONFIG_PATH=${PKG_CONFIG_PATH}${PKG_CONFIG_PATH:+:}$(pyenv prefix)/lib/pkgconfig
tapi itu terlihat sangat jelek. Apakah ada cara yang lebih baik? Apa cara yang tepat untuk menambahkan usus secara kondisional jika dan hanya jika variabel telah ditetapkan?
bash
variable-substitution
scottbb
sumber
sumber
Jawaban:
Anda berada di jalur yang benar dengan
${:+}
operator ekspansi, Anda hanya perlu sedikit memodifikasinya:Kawat gigi pertama meluas ke
$V
dan titik dua iffV
sudah diatur untuk apa-apa - yang persis apa yang Anda butuhkan (dan mungkin juga salah satu alasan keberadaan operator).Jadi dalam kasus Anda:
sumber
${V}${V:+:}W
vs${V:+${V}:}W
. Either way, mereka berdua merasa sangat jelek. Saya berharap untuk sesuatu ... lebih elegan, saya kira?test
- dengan cara apa pun Anda menguji nilai dan menulis varname dua kali, tetapi dengan cara ini Anda melakukannya dalam satu pernyataan eksekusi - dengan cara itu praktis , tapi saya belum pernah bertemu komputer yang elegan .export
. Itu poin yang sangat bagus, saya jengkel detail itu juga.Akhir-akhir ini, saya mengatur GNU stow di komputer saya untuk menyimpan barang-barang di seluruh pengguna seperti perpustakaan di bawah
~/.local
dan mengalami masalah ketika mendefinisikanLD_LIBRARY_PATH
,CPATH
danLIBRARY_PATH
, secara tidak sengaja meletakkan titik dua di sana dan dengan demikian memecahkan barang-barang.Lalu saya menemukan pertanyaan Anda dan jawabannya tidak sepenuhnya elegan ;-), dan saya menulis fungsi kecil untuk menangani ini, silakan temukan di sini: https://gist.github.com/rico-chet/0229e4c080d9f51a02535dd25a656a8a
// diedit seperti yang disarankan oleh @Kusalananda
sumber
( IFS=:; set -- 1 2 3 4 5 6; echo "$*" )
join () { var=$1; shift; export "$var"="$( IFS=:; echo "$*" )"; }
${!variable:+${!variable}:}
di tempat yang tepat berhasil bagi saya, semua tes berlalu. Menemukan nama yang tepat adalah ukuran yang terlalu besar bagi pembaca :)