繁体   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