[英]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.