Bash脚本存储Helm命令输出到变量报表达式语法错误解决
报错产生原因
你代码中使用的$(( ... ))是Bash的算术扩展语法,该语法的作用是解析执行括号内的整数算术运算逻辑,例如echo $((2*3))会输出计算结果6。Bash运行时会把双小括号内的所有内容当作算术表达式解析,而helm ls -A -o json是外部命令调用语句,完全不符合算术表达式的语法规则,因此会直接抛出syntax error in expression(表达式语法错误)。
正确实现方式
Bash中捕获命令执行输出并存储到变量的标准语法是命令替换,使用单组小括号包裹命令的$(command)格式即可(旧版兼容写法为反引号包裹命令`command`,但$(...)支持嵌套、可读性更强,是当前推荐写法)。
正确可运行的代码如下:
MY_VAR=$(helm ls -A -o json) echo "${MY_VAR}"
注意事项
- Bash变量赋值语法要求
=两侧绝对不能加空格,否则会触发命令未找到类的报错 - 打印变量时建议给变量引用加上双引号,避免命令返回内容中的空格、换行、通配符被Bash自动做单词拆分、通配符展开,导致输出格式错乱或者执行意外逻辑
- 如果需要同时捕获Helm命令的错误输出,可以在命令内加stderr重定向,写法为
MY_VAR=$(helm ls -A -o json 2>&1)
内容的提问来源于stack exchange,提问作者Tom cat b
相关产品推荐
相关产品推荐

