是否可以一次执行多个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变量操作”的实例,所以也许你不能这样做,但可能我只是没有找到合适的条款。
答案 0 :(得分:3)
这是一个非常好的问题,但不是参数扩展允许的内容。 man bash
规定扩展适用于参数名称或符号,例如
参数扩展
`$'字符引入参数扩展,命令 替换或算术扩展。 参数名称或 要展开的符号可以用大括号括起来,大括号是可选的 但用来保护变量从字符扩展 紧随其后,可以解释为部分 名。
当您寻求将扩展链接在一起时,您尝试使用第一次扩展产生的文本作为参数名称或符号(它不是),因此命令失败并出现语法错误。
好问题!
(注意:)要完成 - 在某些情况下,您可以在另一个参数扩展中嵌入参数扩展,但这些仅限于外部扩展寻找单个数字的位置扩展的一部分,可以通过包含的扩展来提供,例如字符串的长度,例如${#var}
中的v=foo; echo ${v:$((${#v}-1))}