代码之家  ›  专栏  ›  技术社区  ›  ceth

在$PATH变量中的目录上循环

  •  -1
  • ceth  · 技术社区  · 6 年前

    我需要循环$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

    我该怎么做?

    3 回复  |  直到 6 年前
        1
  •  1
  •   ruakh    6 年前

    我认为最好的方法是:

    while IFS= read -r -d : ; do
      directory="$REPLY"
    
      printf '%s\n' "$directory"
    done <<< "$PATH:"
    

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

        2
  •  1
  •   David C. Rankin    6 年前

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

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

    如果你只需要遍历一次列表,那么鲁克 while 循环很好。

        3
  •  0
  •   builder-7000    6 年前

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

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

    如果目录中有空格 $路径