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

使用变量传递参数给scanimage时--source参数报错求助

解决scanimage脚本变量传递--source参数报错的问题

报错信息:

scanimage: setting of option --source failed (Invalid argument)

问题原因

这是因为变量赋值和展开时的引号处理错误导致的。在报错的脚本里:

Source='--source="ADF Duplex"'

外层单引号把--source="ADF Duplex"整个当成了字符串,当你用$Source展开时,bash会按空格把它拆成--source="ADF和Duplex"两个参数传给scanimage。而且这里的引号会被当作普通字符传递,不是用来包裹空格的分隔符,导致scanimage无法识别正确的扫描源参数。

而直接在命令里写--source="ADF Duplex"时,bash会正确解析引号,把ADF Duplex作为一个整体传递给--source选项,所以能正常运行。

解决方案

方案1:用数组存参数(推荐)

bash数组能完美处理带空格的命令参数,每个选项或参数单独作为数组元素:

#!/bin/bash
Source=(--source="ADF Duplex")
Device="canon_dr:libusb:001:011"
scanimage -d "$Device" "${Source[@]}" > test.tiff

展开数组时用"${Source[@]}",能保证每个元素作为独立参数传递,不会被空格拆分。

方案2:拆分选项和参数值

把选项名和参数值分开存储,调用时分别传递:

#!/bin/bash
SourceValue="ADF Duplex"
Device="canon_dr:libusb:001:011"
scanimage -d "$Device" --source="$SourceValue" > test.tiff

这种方式逻辑清晰,也不容易出错。

方案3:用eval解析(不推荐)

如果一定要把整个选项存在变量里,可以用eval强制解析引号,但eval有安全风险,不建议在生产脚本中使用:

#!/bin/bash
Source='--source="ADF Duplex"'
Device="canon_dr:libusb:001:011"
eval scanimage -d "$Device" "$Source" > test.tiff

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 00:26:13