如何提取pm2 id返回数组的首个元素并赋值给Shell变量
提取pm2 id命令返回结果中的目标ID
pm2 id <name> 输出的是方括号包裹的类数组字符串(例如[2]),不是Shell原生支持的数组结构,只要去掉前后包裹的方括号,就能拿到第一个元素也就是你需要的ID值,以下是几种可直接用的实现方式:
方案1:Shell内置参数扩展(推荐,无额外依赖)
兼容Bash、Zsh等绝大多数主流Shell,不需要调用外部命令,执行效率最高:APP_ID=$(pm2 id <name>) # 截取字符串,跳过第1位的左括号,截取到倒数第1位右括号之前的内容 APP_ID=${APP_ID:1:-1}该方法对多位数ID同样生效,比如返回
[24]时,最终APP_ID取值就是24。方案2:tr命令过滤字符(POSIX标准兼容)
如果需要在Ash、Dash等精简Shell环境运行,可以通过管道过滤掉所有方括号字符:APP_ID=$(pm2 id <name> | tr -d '[]')方案3:jq解析JSON(格式容错性最高)
pm2的返回格式符合JSON数组规范,如果环境中安装了jq工具,可以用标准JSON解析逻辑取值,即使后续输出带多余空格、格式有小调整也能正确识别:APP_ID=$(pm2 id <name> | jq -r '.[0]')加
-r参数是为了直接输出原始值,不会额外包裹引号。
注意:不要直接把命令输出按Shell数组语法赋值,比如写
APP_ID=( $(pm2 id <name>) ),这种写法拿到的第一个元素是带左括号的[2,不符合预期。
内容的提问来源于stack exchange,提问作者Chrizz
相关产品推荐
相关产品推荐

