我需要遍历$ 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
我该怎么办?
答案 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
目录中有空格,则无法使用