【问题标题】:Get all characters of string except the last 2 in bash [duplicate]获取bash中除最后2个之外的字符串的所有字符[重复]
【发布时间】:2018-02-02 22:08:36
【问题描述】:

我想知道如何打印我拥有的字符串,但在 bash 中没有最后两个字符。 例如:

str = "hello.c"

然后只打印hello

感谢您的回答。

【问题讨论】:

  • 你的意思是除了最后两个,还是除了扩展名?如果是hello.cpp,你要hello还是hello.c
  • 链接副本中明确涵盖了这两种情况。

标签: string bash substring


【解决方案1】:

答案是使用bash-builtin string manipulation:

str="hello.c"
echo "${str%.c}"

Try it online!

引用文档:

${parameter%word}
${parameter%%word}

单词被扩展以产生一个模式,就像在文件名中一样 扩张。如果模式匹配扩展的尾随部分 参数的值,那么展开的结果就是 参数 具有最短匹配模式('%' 情况)或 最长匹配模式(“%%”案例)已删除。如果 参数 是 '@' 或'*',模式移除操作应用于每个位置 依次参数,展开是结果列表。如果 parameter 是下标为“@”或“*”的数组变量,即 模式移除操作应用于数组中的每个成员 转,展开就是结果列表。

【讨论】:

  • 引用:echo "${str%.c}"。否则,如果IFS=l,您将打印he o 作为输出;或者,使用默认的 IFS,如果字符串有一个文字制表符,您可以将其更改为空格(空格包围的 glob 将替换为当前目录中的名称列表等)。
  • @CharlesDuffy 我补充说。谢谢
  • 还请考虑寻找比 ABS 更好的参考——我们花在 freenode #bash 频道上的一半时间是在帮助人们改掉他们在那里养成的坏习惯。 The bash-hackers' wiki reference on parameter expansion 是一个很好的来源。另一个是BashFAQ #100。当然还有official manual
  • 非常感谢。我是一个真正的 shell 脚本菜鸟。
  • @CharlesDuffy 我现在改了,引用的是官方文档,而不是我以前的。
猜你喜欢
  • 2014-11-08
  • 1970-01-01
  • 1970-01-01
  • 2018-05-28
  • 1970-01-01
  • 2011-12-07
  • 2019-07-05
  • 2011-03-29
  • 2011-12-20
相关资源
最近更新 更多