逐行打印$ PATH

时间:2019-03-05 14:42:49

标签: shell sed path

检查$ PATH变量echo $PATH的常用代码通常会打印出一些冗长而繁琐的行,例如: /anaconda2/bin:/anaconda2/condabin:/usr/local/Cellar/root/6.16.00/bin:~/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Library/TeX/texbin:/opt/X11/bin
可读性差。有什么办法可以一行一行地打印所有路径,而不是一行?像这样:

/anaconda2/bin
/anaconda2/condabin
/usr/local/Cellar/root/6.16.00/bin
~/bin
/usr/local/bin
/usr/bin
/bin
/usr/sbin
/sbin
/Library/TeX/texbin
/opt/X11/bin

5 个答案:

答案 0 :(得分:1)

尝试以下代码:

echo $PATH | sed 's|:|\
|g'

sed是一个流编辑器,它的作用是搜索字符':'的每个实例并将其替换为\ newline字符。 “ g”是一个标志,指示“查找和替换”是全局的(默认值是每行替换一个实例)。

您还可以将代码包装在bash配置文件中的函数周围:

function printpath() {
  echo $PATH | sed 's|:|\
|g'
}

因此您只需键入printpath即可获得所需的输出。

答案 1 :(得分:1)

使用tr

echo $PATH | tr : '\n'

答案 2 :(得分:0)

要打印出$ PATH变量行,可以在bash中使用for循环。一个容易实现这一目标的例子是。

for EACH in $PATH; do echo $EACH; done;

答案 3 :(得分:0)

您还可以使用以下awk方法之一:

echo $PATH | awk -F':' '{for(i=1;i<=NF;i++)print $i}'

输出:

/usr/local/git/current/bin
/usr/local/bin
/usr/bin
/bin
/usr/local/sbin
/usr/sbin
/sbin
/usr/local/go/bin

在将:定义为字段分隔符的位置,并在行上打印所有字段。 如果您不介意结尾处是否有空行,则可以使用更简单的命令:

$ echo $PATH | awk 'BEGIN{RS=":"}1'
/usr/local/git/current/bin
/usr/local/bin
/usr/bin
/bin
/usr/local/sbin
/usr/sbin
/sbin
/usr/local/go/bin

这一次您将:定义为记录分隔符,并直接打印每一行。

答案 4 :(得分:0)

echo -e ${PATH//:/\\n}

使用变量替换用换行符替换冒号

<块引用>

${var//模式/替换}

<块引用>

-e 启用反斜杠转义解释

如果 -e 有效,则识别以下序列:

\\反斜杠