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

Bash中多行管道命令赋值变量失败,求助解决方法

Bash脚本JSESSIONID变量赋值与输出错误解决方法

编写了如下Bash脚本(省略部分隐私内容):

JSESSIONID=$(curl -I 'http://17....212' \
-H 'Accept: text/h...b3;q=0.7' \
-H 'Accept-Language: zh...8' \
-H 'Cache-Control: ma...0' \
-H 'Connection: k...ve' \
-H 'Upgrade-Insecure-Requests: 1' \
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' \
--insecure|grep -o -e "JSESSIONID=\(.*\); P"|sed "s/JSESSIONID=//g"|sed "s/; P//g")
echo $(JSESSIONID)

需求是提取JSESSIONID,管道命令单独在命令行执行能返回纯净的JSESSIONID字符串,但脚本运行时出现错误:/etc/rc.common: line 37: JSESSIONID: not found,尝试将$()改为反引号也无效,需要正确的变量赋值与输出方法。

错误原因

报错根源在最后一行的echo $(JSESSIONID):$(...)是命令替换语法,会把JSESSIONID当作系统命令去执行,而非引用已定义的变量,自然会提示"命令未找到"。

修正后的脚本

JSESSIONID=$(curl -I 'http://17....212' \
-H 'Accept: text/h...b3;q=0.7' \
-H 'Accept-Language: zh...8' \
-H 'Cache-Control: ma...0' \
-H 'Connection: k...ve' \
-H 'Upgrade-Insecure-Requests: 1' \
-H 'User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/118.0.0.0 Safari/537.36' \
--insecure | grep -o -e "JSESSIONID=\(.*\); P" | sed "s/JSESSIONID=//g" | sed "s/; P//g")
# 正确引用变量的方式
echo "$JSESSIONID"

额外优化建议

  • 引用变量时加双引号"$JSESSIONID",可避免变量值含空格或特殊字符时出现异常
  • 合并sed命令减少管道步骤:将两个sed命令改为sed -e 's/JSESSIONID=//' -e 's/; P//'

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 14:33:25