2011-01-22 11 views
1

awk 'split'コマンドを使用して現在のディレクトリ名を取得する、小さなスクリプトを書きました。awk分割質問

は、私は分割操作の結果として、トークンの数と「8」を交換する必要が

PWD

$エコー。 // PWD =/home/username/binの場合。私はパッケージに "bin"を取得しようとしています。

package="`echo $PWD | awk '{split($0,a,"/"); print a[8] }'`" 
echo $package 

「a [8]」の代わりにどのディレクトリのパスでスクリプトを動作させるか教えてください。

- 機械

答えて

5

awkは必要ありません。あなたは常にパスの最後のディレクトリが必要な場合だけ実行します。

#!/bin/sh 

cur_dir="${PWD##*/}/" 
echo "$cur_dir" 

上記外部バイナリへの任意のサブシェルおよび/またはフォークを作成しないという利点もあります。それはすべてネイティブのPOSIXシェル構文です。

+0

try: '$ cd /; echo $ {PWD ## * /} ' –

+0

または' basename $(dirname $ PWD) ' – dmckee

+0

@トーマスフェア十分です。シンプルな '/'の追加は、そのことを明らかにするはずです。 – SiegeX

3

あなたはprint a[length(a)]を使用することができますが、それは分裂を回避し、セパレータと$NFカスタムフィールドを使用することをお勧めします:

echo $PWD | awk -F/ '{print $NF}' 

しかし、あなたはかなりbasenameを使用する必要があり、特定の場合:

basename "$PWD" 
1

他の回答をあなたが達成しようとしている機能を実行するための優れた代替品です。しかし、ここであなたの質問に具体的な答えは:

package=$(echo $PWD | awk '{n = split($0,a,"/"); print a[n] }') 
echo "$package" 

split()は、結果の要素の数を返します。