操纵echo $ PATH的输出

时间:2016-05-14 10:44:22

标签: shell

echo $PATH我得到了这个:

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

我想要的是以下列格式获取这些内容:

/usr/local/sbin
/usr/local/bin
...

我试图做的事情:

i=1;
for dir in `echo $PATH|cut -d ':' -f $i`
do
    echo $dir
    i=`expr $i + 1`
done

但它不起作用。有人可以帮我解答一下吗?

3 个答案:

答案 0 :(得分:3)

tr救援:

echo "$PATH" | tr : '\n'

答案 1 :(得分:1)

这样的事情:

old_IFS=$IFS
IFS=:
set -- $PATH
while [ $# -gt 0 ]; do
    echo $1;
    shift;
done
IFS=$old_IFS

答案 2 :(得分:0)

你应该这样做:

i=0
echo "$PATH" | awk 'BEGIN{RS=":"}{printf "%s\0",$0}'| while read -rd '' line
do
echo "$line"; # or do something else with it?
i=`expr $i + 1`
done

这将处理路径变量中的非标准文件夹,如
/usr/local folder& /usr/new/continued/in/next/line folder等等。

您也可以使用tr代替awk,但将\n替换为\0,如下所示:

echo "$PATH" | tr : '\0' | while ...