2016-12-01 44 views
0

假设您的PATH环境变量包含由:分隔的路径列表,我如何才能将此列表中的第一个文件夹获取到另一个变量中?如何从bash中的PATH环境变量中获取第一个目录?

+0

我只是想知道为什么你从不选择一个答案。这是我们在这里推出的方式,你知道:[我应该怎么做当有人回答我的问题?](https://stackoverflow.com/help/someone-answers) – sorontar

回答

3

我假设你想用bash命令来做到这一点。试试这个:

echo ${PATH%%:*} 
+0

这应该是'%%:*';你想要''*'最长的匹配。 – chepner

+0

好点。纠正。 –

1

到目前为止,我能得到这个使用MYDIR=$(sed 's/:/\n/' <<< "$PATH" | head -n 1),但我会很高兴地看到一个更漂亮的实现。

2

如何使用awk?

foo=`echo $PATH | awk -F':' '{ print $1}'` 
+0

谢谢!到目前为止,这是跨平台Linux和Mac OS的唯一例子。 – sorin

+0

这也适用于没有bash扩展 - 如果这是重要的。 – Hannu

2

一种方法来读取第一个条目使用read与正确IFS

IFS=: read firstPath _ <<< "$PATH" 

echo "$firstPath" 

您还可以使用IFS来填充一个数组,并使用索引得到阵列中的任何Nth位置:

IFS=: read -ra arr <<< "$PATH" 

echo "First entry: ${arr[0]}" 
echo "Second entry: ${arr[1]}" 
echo "Fifth entry: ${arr[4]}" 

另一个bash解决方案是先剥去所有东西:

firstPath="${PATH%%:*}" 
0

无论是这样的:

mydir=${PATH%%:*} 

或者这样:

IFS=: read mydir t <<<"$PATH" 

都不错的解决方案。