2
在編譯腳本時,我碰到了命令do f=${file##*/}
。我很想知道這一行中的##
是什麼意思。感謝您提前回復shell腳本中的##是什麼意思
在編譯腳本時,我碰到了命令do f=${file##*/}
。我很想知道這一行中的##
是什麼意思。感謝您提前回復shell腳本中的##是什麼意思
在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
非常感謝你。 – user1407199
我相信Korn shell在Bash之前有這樣的表示法。無論如何它也可以在Korn shell中使用。 –
請注意'%%/*'不是dirname的真正替代品。如果您將dirname提供爲裸文件名,則返回'。',而'%%/*'返回名稱不變。 (在一個腳本中,可能會導致使用文件名創建目錄,而不是識別當前目錄已存在。) – William