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

如何将数组放入命令字符串中通过eval命令正确执行

问题原因

你遇到的确实是引号嵌套解析的问题:
shell解析com="./test2.sh "$array1" "$array2" "时,相邻的双引号会直接闭合,你写的外层双引号和包裹array1、array2的双引号没有转义,最终com变量展开后的内容是:
./test2.sh /dir/file1.txt /dir/file2.txt /dir/file3.txt /dir/file4.txt /dir/file5.txt /dir/file6.txt
相当于把两个路径字符串拆成了6个独立参数传给test2.sh,test2.sh只能拿到前两个参数,自然只输出array1的前两个路径。

解决方法

方法1:转义内层双引号(最贴合现有写法的方案)

给com变量里包裹array1、array2的双引号加反斜杠转义,让eval执行时能识别到这两个是带引号的完整参数,同时eval后的变量也要用双引号包裹避免二次拆分:

array1="/dir/file1.txt /dir/file2.txt /dir/file3.txt"
array2="/dir/file4.txt /dir/file5.txt /dir/file6.txt"

com="./test2.sh \"$array1\" \"$array2\""

eval "$com"

方法2:用数组存储命令(更安全的替代方案)

如果使用bash、zsh等支持数组的shell,用数组存储命令参数可以避免大量转义逻辑,扩展性更强,后续新增参数直接往数组追加即可:

array1="/dir/file1.txt /dir/file2.txt /dir/file3.txt"
array2="/dir/file4.txt /dir/file5.txt /dir/file6.txt"

com=(./test2.sh "$array1" "$array2")

eval "${com[@]}"

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.05 01:36:02