我有一个类似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