循环遍历$ PATH变量中的目录

时间:2019-06-02 03:56:22

标签: bash

我需要遍历$ 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,{ {1}},/usr/local/bin

我该怎么办?

3 个答案:

答案 0 :(得分:1)

我认为最好的方法是这样:

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

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

使用read命令读取“行”,其中:是行终止符。 (将IFS设置为空字符串可确保read不会尝试将行拆分为单词,以防您的路径中包含空格或其他内容。)

答案 1 :(得分:1)

bash的另一种选择是简单地创建一个数组,其中每个元素都包含$PATH的一个组件,然后您可以根据需要简单地在数组上循环,例如

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

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

答案 2 :(得分:0)

您可以使用变量替换用换行符替换$PATH中的每个冒号:

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

如果$PATH目录中有空格,则无法使用