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

Shell实现命令输出赋值给多个全局变量并打印的问题求助

可行解决方案

方案1:修正eval用法,在当前shell执行生成的命令

你之前的eval写法出错是因为嵌套引号转义逻辑错误,直接捕获生成的完整命令再用eval执行即可,变量会保存在当前shell会话:

var=4
com="$(echo "A\nB\nC\nD" | sed 's/\\n/\n/g')"
# 捕获生成的read命令,eval执行后直接echo变量
eval "$(seq "$var" | sed 's/^/var/g' | xargs | sed 's/^/read /g' | sed "s/\$/ <<< \"\$com\"/g")" && echo $var1 $var2 $var3 $var4

执行后直接输出A B C D。

方案2:更简洁的循环实现(避免复杂转义)

不需要拼接动态read命令,用循环赋值逻辑更稳定,可读性更高:

var=4
# 直接用ANSI-C引号定义换行分隔的内容,省略额外sed处理
com=$'A\nB\nC\nD'
# 循环逐行读取赋值给对应变量
for ((i=1; i<=var; i++)); do
    read -r "var$i"
done <<< "$com"
echo "$var1 $var2 $var3 $var4"

原有方案失败原因
  • 反引号包裹执行:shell语法解析顺序问题,<<<重定向符会被识别为普通文本参数,命令执行语法错误
  • 管道给bash执行:bash是独立子进程,子进程内赋值的变量不会同步到父级当前shell
  • 原有eval写法:嵌套双引号未正确转义,导致sed生成的命令格式错误
  • 拼接echo管道给bash:变量在子进程内生效,父进程无法读取,同时$com转义错误导致内容展开异常

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 02:36:08