可以同时使用多个BASH变量操作吗?

时间:2018-05-07 21:37:41

标签: string bash variables scripting

是否可以一次执行多个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 Bash Scripting Manual或联机帮助页,Google或这里找不到“(组合|多个)bash变量操作”的实例,所以也许你不能这样做,但可能我只是没有找到合适的条款。

1 个答案:

答案 0 :(得分:3)

这是一个非常好的问题,但不是参数扩展允许的内容。 man bash规定扩展适用于参数名称或符号,例如

  

参数扩展

     

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

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

好问题!

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