我有一個類似sample.txt.pgp的字符串,我想在shell腳本中返回sample.txt(但是,字符串長度會有所不同,因此基本上是「.pgp」之前的所有字符)。是否有一個substr函數?就像,如果我做substr('sample.txt.pgp', -4, 0)
,它應該返回sample.txt?現在它不是,所以我想知道如果我的語法錯了,或者substr不是函數?shell腳本中的Unix substr?
回答
您可以使用basename
:
$ basename sample.txt.pgp .pgp
sample.txt
使用反引號或$()
把結果在一個變量,如果你想:
$ FILE=sample.txt.pgp
$ VARIABLE=$(basename "$FILE" .pgp)
$ echo $VARIABLE
sample.txt
a='sample.txt.pgp'
echo ${a%.*} # sample.txt (minimal match)
echo ${a%%.*} # sample (maximal match)
這看起來很有趣......美元符號和%代表什麼?你有一個網頁有點解釋這個或任何東西? – TwixxyKit 2010-03-24 20:59:00
@KnockKnockWhosThere:請閱讀http://www.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html#tag_18_06_02瞭解更多信息。 :-) – 2010-03-24 21:00:44
而一個更受限制的版本:'$ {a%.pgp}'只會刪除一個'.pgp'擴展名(如果存在的話);原文將根本刪除任何擴展名(這在某些情況下可能有用)。 – 2010-03-24 21:27:14
- 1. Unix Shell腳本
- 2. Shell腳本UNIX
- 3. Unix shell腳本
- 4. 的Unix Shell腳本
- 5. UNIX腳本中的shell腳本錯誤
- 6. Unix shell腳本 - mailsend
- 7. UNIX shell腳本:UDV
- 8. shell腳本在UNIX
- 9. Unix Shell腳本(KSH)
- 10. 的Unix shell腳本與反
- 11. 的Unix shell腳本錯誤
- 12. haskell和Unix shell腳本
- 13. 在單UNIX Shell腳本
- 14. Unix Shell腳本函數
- 15. Unix shell腳本錯誤
- 16. 逃避UNIX shell腳本
- 17. Shell腳本UNIX提示
- 18. 關於UNIX Shell腳本
- 19. UNIX shell腳本while循環
- 20. 沒有從UNIX shell腳本
- 21. 無法在UNIX Shell腳本
- 22. 關於Unix shell腳本
- 23. unix shell腳本錯誤
- 24. unix bash shell腳本寫作
- 25. 簡單瞭解UNIX和UNIX shell腳本!
- 26. 或Shell腳本中的條件 - Unix
- 27. AIX中的Unix Shell腳本(Sed命令)
- 28. Unix shell腳本中的算法
- 29. unix shell腳本中的SQL查詢
- 30. 如何從shell腳本調用另一個shell腳本的Unix
有趣的是,你使用'-s後綴'符號;這不是由POSIX標準化的;經典符號將是'$(basename $ file .pgp)'(假設名稱保存在變量'$ file'中)。 – 2010-03-24 21:25:44
@Jonathan是的!我剛剛在我的OS X機器上做了一個'man basename',並且看到了'-s'選項;它有點更靈活(可以處理多個字符串),我不知道它不是POSIX。我會編輯我的答案。 – 2010-03-24 21:40:00
已編輯;我也放了一些雙引號來支持文件名中的空格。 – 2010-03-24 21:41:59