可以一次使用多个BASH变量操作吗?

Luk*_*sna 5 string variables bash scripting

一枪可以执行多个bash变量操作吗?

例如:

# for this variable
foo="string_that_is_lower"

# can I do this in one shot?
$foo="${foo:0:4}"
echo "${foo^^}"
Run Code Online (Sandbox Code Playgroud)

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

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

${${foo^^}:0:4}
${{foo^^}:0:4}
${foo^^,:0:4}
${foo^^;:0:4}
${foo^^ :0:4}
Run Code Online (Sandbox Code Playgroud)

全部产生语法错误。

我在Advanced Bash 脚本手册,联机帮助页或Google或此处都找不到“(combine | multiple)bash变量操作”的实例,所以也许您做不到,但也许我只是在搜索为正确的条款。

Dav*_*ica 5

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

参数扩展

`$' 字符引入了参数扩展、命令替换或算术扩展。要扩展的参数名称或符号可以用大括号括起来,这是可选的,但用于保护要扩展的变量免受紧跟其后的字符的影响,这些字符可能被解释为名称的一部分。

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

好问题!

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