Fog*_*ert 3 unix linux bash shell
如果我输入echo $PATH终端,我会得到以下结果:
/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/home/fnorbert/.local/bin:/home/fnorbert/bin
Run Code Online (Sandbox Code Playgroud)
我想使用shell脚本迭代这些路径,但我不知道如何做到这一点.
我尝试了以下方法:
for i in 1 2 3
do
echo $PATH | cut -d':' -f$i
done
Run Code Online (Sandbox Code Playgroud)
这会打印前三个路径,但是i如果可能的话,我想用变量表示每个路径.
您可以使用read分隔符设置为:
while read -d ':' p; do
echo "$p"
done <<< "$PATH:"
Run Code Online (Sandbox Code Playgroud)
最简单的方法可能是更改IFS为冒号并让单词拆分来完成:
IFS=:
for p in $PATH ; do
echo "$p"
done
Run Code Online (Sandbox Code Playgroud)
但这可能会触发文件名通配符,在奇怪的情况下,您PATH包含的字符如*?[]. 你需要使用set -f来避免这种情况。
尽管IFS无论如何更改可能会被认为是有问题的,因为它会影响脚本的其余部分。因此,在 Bash 中,我们可以使用 将路径拆分为一个数组read -a,这对于 glob 字符也没有问题:
IFS=: read -a paths <<< "$PATH"
for p in "${paths[@]}" ; do
echo "$p"
done
Run Code Online (Sandbox Code Playgroud)