2013-04-16 88 views

回答

9

bash中,它刪除了前綴模式。

在這裏,它基本上給你的一切過去的/路徑分隔符後(通過移除前綴*/,其次任何數量的字符由/):

pax> fspec=/path/to/some/file.txt 

pax> echo ${fspec##*/} # greedy remove */ at start 
file.txt 

還有一個單#變體是非貪婪爲後綴匹配和等同物:

pax> echo ${fspec#*/} # non-greedy remove */ at start 
path/to/some/file.txt 

pax> echo ${fspec%%/*} # greedy remove /* at end 

pax> echo ${fspec%/*} # non-greedy remove /* at end 
/path/to/some 

##*/%/*大致相當於什麼ÿ分別從OU和basename得到dirname,但內bash,所以你不必調用外部程序:

pax> basename $fspec 
file.txt 

pax> dirname $fspec 
/path/to/some 
+0

非常感謝你。 – user1407199

+1

我相信Korn shell在Bash之前有這樣的表示法。無論如何它也可以在Korn shell中使用。 –

+0

請注意'%%/*'不是dirname的真正替代品。如果您將dirname提供爲裸文件名,則返回'。',而'%%/*'返回名稱不變。 (在一個腳本中,可能會導致使用文件名創建目錄,而不是識別當前目錄已存在。) – William

相關問題