2016-12-01 2 views
0

あなたのPATH環境変数が:で区切られたパスのリストを含んでいるとすれば、このリストの最初のフォルダだけを別の変数にどうやって取得できますか?bashのPATH環境変数から最初のディレクトリを取得する方法は?

+0

私はあなたが決して1つの答えを決して選んでいないのは不思議です。それは私たちがここでロールする方法です、あなたは知っている:[誰かが私の質問に答えるときに私は何をすべきですか?](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

正しいIFSreadを使用する最初のエントリを読むための一つの方法:

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

echo "$firstPath" 

あなたはまた、配列を移入し、インデックスを使用してアレイから任意のNth位置を取得するためにIFSを使用することができます。

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

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

もう1つのbashソリューションでは、最初にすべてを取り除いています:

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

のいずれかをこの:

mydir=${PATH%%:*} 

またはこの:

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

は良いソリューションです。

関連する問題