如何像这样显示来自$PATH的所有路径?
Path 1: usr/bin
Path 2: /bin
... and so on.
我对此很陌生,所以我不知道如何处理 grep 以及如何像这样显示它。提前感谢
我不太确定你为什么要这个? tr
可以翻译字符:
$ echo "$PATH" | tr ':' $'n'
/usr/bin
/bin
...
tr
会将 SET1 ( :
) 转换为 SET2 (换行符)
或者,您可以使用AWK将其格式化得更好一点:
$ awk '{ print "Path: "NR, $0 }' RS=: <<< "$PATH"
Path 1: /usr/bin
Path 2: /bin
...
在 shell 脚本中,您可以执行以下操作:
#!/bin/bash
IFS=':' read -ra ITEMS <<< "$PATH"
for i in "${ITEMS[@]}"; do
echo "$i"
done
这将在单独的行上打印出列表中的每个单独的 PATH 设置。
如果你想用它做其他事情,你只需更改for
循环中的命令。
有点尴尬的解决方案:
awk 'BEGIN{RS=":"}{printf "Path %d: %sn",++i,$0}' <<<"$PATH"
输出
Path 1: /home/ssam/bin
Path 2: /usr/local/sbin
Path 3: /usr/local/bin
Path 4: /usr/sbin
Path 5: /usr/bin
Path 6: /sbin
Path 7: /bin
Path 8: /usr/games
Path 9: /usr/local/games
Path 10: /dingo/mingo
笔记:
- 这里的字符串或
<<<
仅由 [ 几个] shell 支持。 - 我的 GNU bash 版本是 4.3.11,其中支持
<<<
。
你可以
像这样使用awk
,
$ awk -F: '{
for (i = 0; ++i <= NF;)
print "Path", i,":", $i
}' <<<$PATH
Path 1 : /usr/local/sbin
Path 2 : /usr/local/bin
Path 3 : /usr/sbin
Path 4 : /usr/bin
Path 5 : /sbin
Path 6 : /bin
Path 7 : /usr/games
Path 8 : /usr/local/games
Path 9 : /snap/bin
如果你想使用PYTHON
你可以这样尝试,
$ python -c "import os; print 'n'.join(os.environ['PATH'].split(':'))"
/usr/local/sbin
/usr/local/bin
/usr/sbin
/usr/bin
/sbin
/bin
/usr/games
/usr/local/games
/snap/bin