【问题标题】:Can multiple BASH variable manipulations be used at once? [duplicate]可以一次使用多个 BASH 变量操作吗? [复制]
【发布时间】:2018-10-17 18:26:04
【问题描述】:

是否可以一次执行多个 bash 变量操作?

例如:

# for this variable
foo="string_that_is_lower"

# can I do this in one shot?
$foo="${foo:0:4}"
echo "${foo^^}"

有没有办法把这些结合起来?我意识到这是一个微不足道的问题,因为它工作得很好,或者可以简单地使用其他内置工具,如 echo ${foo:0:4} | tr [[:lower:]] [[:upper:]],但那很蹩脚。

我已经尝试了所有我认为可行的逻辑组合:

${${foo^^}:0:4}
${{foo^^}:0:4}
${foo^^,:0:4}
${foo^^;:0:4}
${foo^^ :0:4}

都会产生语法错误。

我在Advanced BashScripting Manual、联机帮助页、Google 或此处找不到“(combine|multiple) bash 变量操作”的实例,所以也许你不能这样做,但可能我'我只是没有在寻找合适的术语。

【问题讨论】:

  • 答案 - 否。参数扩展作用于变量,而不是先前扩展的文本结果。 (但很好的问题)
  • 也许我应该在“如何做”之前搜索“是否可能”。不过,这是有道理的,谢谢。

标签: string bash variables scripting


【解决方案1】:

这是一个很好的问题,但 参数扩展 不允许这样做。 man bash 规定扩展对参数名称或符号进行操作,例如

参数扩展

`$' 字符引入参数扩展,命令 替换或算术扩展。 参数名称或 要扩展的符号可以用大括号括起来,这是可选的 但用于保护要从字符扩展的变量 紧随其后,这可以解释为 名字。

当您试图将扩展链接在一起时,您是在尝试将第一个扩展产生的 文本 用作 参数名称或符号(它不是),因此命令失败并出现语法错误。

好问题!

(注意: 完整——在某些情况下,您可以在另一个参数扩展中嵌入参数扩展,但仅限于外部扩展正在寻找单个数字的情况其扩展的一部分,可以通过包含的扩展来提供,例如字符串的长度,例如 ${#var} in v=foo; echo ${v:$((${#v}-1))})

【讨论】:

  • 我认为模糊地回忆起以前看到过这种嵌入参数扩展可能是我认为这是可能的原因。非常详尽的解释,谢谢。
猜你喜欢
  • 2014-06-16
  • 2011-10-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-12-26
相关资源
最近更新 更多