在 Linux Ubuntu 上,當你這樣做時sudo apt update && sudo apt install perl,它會將以下內容添加到~/.bashrc檔案的底部(至少,幾個月后,我認為這就是添加這些行的原因):
PATH="/home/gabriel/perl5/bin${PATH: :${PATH}}"; export PATH;
PERL5LIB="/home/gabriel/perl5/lib/perl5${PERL5LIB: :${PERL5LIB}}"; export PERL5LIB;
PERL_LOCAL_LIB_ROOT="/home/gabriel/perl5${PERL_LOCAL_LIB_ROOT: :${PERL_LOCAL_LIB_ROOT}}"; export PERL_LOCAL_LIB_ROOT;
PERL_MB_OPT="--install_base \"/home/gabriel/perl5\""; export PERL_MB_OPT;
PERL_MM_OPT="INSTALL_BASE=/home/gabriel/perl5"; export PERL_MM_OPT;
這種奇怪的語法在許多行(包括第一行)中做了什么?它似乎是某種 bash 陣列切片:
${PATH: :${PATH}}
這${PATH}部分非常簡單:它讀取PATH變數的內容,但其余部分對我來說非常神秘。
uj5u.com熱心網友回復:
這不是陣列切片;它使用了 POSIX 引數擴展運算子之一。在bash手冊頁的“引數擴展”部分中,
${
parameter:word}使用替代值。 如果
parameter為 null 或未設定,則不替換任何內容,否則替換擴展word。
這是一種復雜的方法,可以確保只:在值PATH不為空的情況下才添加 a 。更長,更清晰的寫作方式是
if [ -n "$PATH" ]; then
PATH=/home/gabriel/perl5/bin:$PATH
else
PATH=/home/gabriel/perl5/bin
fi
但是,由于幾乎無法想象PATH在.basrhc獲取時它是空的,因此只需預先添加新路徑并完成它會更簡單。
PATH=/home/gabriel/perl5/bin:$PATH
如果PATH實際上以 a 結尾:,它將在搜索路徑中隱式包含當前作業目錄,出于安全原因,這不是一個好主意。同樣來自bash手冊頁,在以下條目下的 Shell 變數部分中PATH:
PATH 值中的零長度(空)目錄名稱表示當前目錄。空目錄名稱可能顯示為兩個相鄰的冒號,或者顯示為初始冒號或尾隨冒號。
順便說一句,最好了解各種安裝程式嘗試添加到您的 shell 配置中的內容。這并不總是必要的,有時可以主動更改您已經配置的內容。
如果軟體包只是列印說明需要添加到您的配置中的內容(以及原因),我會更喜歡,并將其留給用戶進行適當的修改。
uj5u.com熱心網友回復:
What does this strange syntax do in many of the lines, including in the first line?
這是${parameter: word}的形式引數擴展,其中word成為膨脹值,如果parameter不是取消設定和不具有一個空字串(又名空)的值。
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/407346.html
標籤:
