簡體   English   中英

循環遍歷$ PATH變量中的目錄

[英]Looping over directories in $PATH variable

我需要遍歷$ PATH變量中的所有目錄。 像這樣:

for directory in "$PATH"; do 
    echo $directory
done

因此,如果我的$ PATH變量是/usr/bin /bin /usr/sbin /sbin /usr/local/bin ,則需要包含五個目錄的循環: /usr/bin/bin/usr/sbin/sbin/usr/local/bin/usr/local/go/bin

我該怎么做 ?

我認為最好的方法是這樣的:

while IFS= read -r -d : ; do
  directory="$REPLY"

  printf '%s\n' "$directory"
done <<< "$PATH:"

它使用read命令讀取“行”,其中:是行終止符。 (將IFS設置為空字符串可確保在路徑中包含空格或其他字符的情況下, read不會嘗試將行拆分為單詞。)

bash的另一種選擇是簡單地創建一個數組,其中每個元素都包含$PATH一個組成部分,然后您可以根據需要簡單地循環遍歷該數組,例如

dirs=( $(IFS=:; echo $PATH) )
for d in "${dirs[@]}"; do
    ## use d as needed
done

如果只需要遍歷列表一次,那么ruakh的while循環就可以了。

您可以使用變量替換將$PATH每個冒號替換$PATH換行符:

for p in ${PATH//:/$'\n'}; do
  echo $p
done

如果$PATH目錄中有空格,則無法使用

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM