You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

AWS Beanstalk build.spec中tr转小写后变量值未更新问题

问题:AWS Beanstalk build.spec中bash变量转小写未生效

先看你的脚本片段:

stg="$STG.js"
stg= $stg | tr '[:upper:]' '[:lower:]'
cat deployment-config/$stg >> src/tj-paths/pathExtensions.js

当$STG传入Stg3时,你期望stg变成stg3.js,但实际还是Stg3.js——核心问题出在变量赋值的语法错误上。

为什么原来的写法不生效?

在bash里,stg= $stg | tr ...这种写法完全不是你想的“把$stg的值转小写后赋值给stg”。bash会把它解析成:

  1. 临时设置环境变量stg=(空值),仅对后面的$stg命令生效
  2. 尝试执行$stg这个“命令”——也就是把Stg3.js当作命令名来运行,这大概率会报错Stg3.js: command not found
  3. 把这个错误命令的输出(几乎是空的)传给tr命令,但整个过程完全没有修改你原来的stg变量,所以它的值还是最初的Stg3.js

两种正确的解决方法

方法1:用命令替换捕获tr的输出

把管道命令的结果通过$(...)捕获后再赋值给变量:

stg="$STG.js"
# 用echo输出变量值,通过tr转小写后重新赋值
stg=$(echo "$stg" | tr '[:upper:]' '[:lower:]')
cat deployment-config/$stg >> src/tj-paths/pathExtensions.js

方法2:用bash参数扩展(更高效)

如果你的环境用的是bash 4.0及以上版本(AWS Beanstalk的默认环境基本都满足),可以直接用bash内置的参数扩展语法,不需要调用外部的tr命令:

# 直接把$STG转成小写,再拼接.js
stg="${STG,,}.js"
cat deployment-config/$stg >> src/tj-paths/pathExtensions.js

这里${STG,,}是bash的内置语法,会把变量STG里的所有字符转为小写,比调用外部命令更高效,也更简洁。

用这两种方法,当$STG是Stg3时,stg都会被正确设置为stg3.js,后续的cat命令也能找到对应的配置文件。

内容的提问来源于stack exchange,提问作者Hamed Minaee

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.12 04:21:08