Bash报价问题

时间:2011-01-24 23:54:17

标签: bash shell escaping cygwin quotes

我正在尝试使用run从Cygwin调用本机Windows命令,但是当它发生时,命令(我从注册表中获取)已经引用了几个部分:

"C:\path\to\file.exe" -- "some argument"

如果我从终端使用run "C:\path\to\file.exe" -- "some argument",它可以正常工作,但是只要我把它放在Bash脚本中,它就会尝试转义双引号并在整个事物周围添加单引号,它毁了它:

\"C:\path\to\file.exe\" -- \"some argument\"

如果在尝试运行命令之前放入echo,它会显示预期的命令,但run命令失败。

echo $command
run $command

我对bash脚本很新,所以我希望我缺少一些基本的东西:)

更新:我觉得我对单引号感到困惑。

更新:以下是该脚本的相关部分:

command=`cat /proc/registry/hkey_classes_root/http/shell/open/command/@`
command=${command/"%1"/$target}
run $command

以下是我为响应SiegeX的建议而尝试的内容:

command=`cat /proc/registry/hkey_classes_root/http/shell/open/command/@`
command=(${command/"%1"/$target})
run "${command[@]}"

我还尝试cmd /c作为run的替代方案,结果相同(来自终端,但不是脚本)。

2 个答案:

答案 0 :(得分:2)

这对我有用:

command=$(< /proc/registry/hkey_classes_root/http/shell/open/command/@)
command=${command//\"/}
command=$(cygpath "$command")
command=${command/\%1/$target}
eval run $command

答案 1 :(得分:0)

引用$command,如下所示:run "$command"

如果这不起作用,请尝试:

#!/bin/bash

cmd=("C:\path\to\file.exe" "--" "some argument")
run "${cmd[@]}"