2011-01-22 68 views
1

我寫了一個小腳本,用awk'split'命令獲取當前目錄名。awk拆分問題

回聲$ PWD

我需要與作爲分割操作的結果的令牌的數量,以取代「8」。 //如果PWD =/home/username/bin。我正試圖將「bin」放入包中。

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

請問我可以用什麼替代'print a [8]'替換腳本以獲得任何目錄路徑的工作?

-Sachin

回答

5

你不需要awk。如果你總是想在一個路徑中最後一個目錄只是做:

#!/bin/sh 

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

上面有沒有創造任何子shell和/或叉外部二進制文件的額外好處。這都是原生的POSIX shell語法。

+0

嘗試:`$ cd /; echo $ {PWD ## * /}` – 2011-01-22 23:37:34

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()返回結果元素的數量。