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