【问题标题】:How to use quotes effectively in cygwin?如何在cygwin中有效地使用引号?
【发布时间】:2012-01-03 09:31:40
【问题描述】:
2.bat calls 3.bash "cmd /c "path to command with spaces""

3.bash 包含

cmd="$1"
"$cmd"

我正在使用cmd /c command,因为当 bash 脚本运行时,它不会将该命令识别为可执行文件,因此我必须使用 cmd /c 启动它。但是,这会导致引用的另一个问题。

+ cmd='cmd /c "c:\program'

如何解决这个问题?

【问题讨论】:

    标签: bash batch-file cygwin quotes


    【解决方案1】:

    你应该转义内部引号:

    3.bash "cmd /c \"path to command with spaces\""
    

    您也可以使用命令cygpath 而不是cmd

    #3.bash
    "`cygpath -u "$1"`"
    

    和命令

    3.bash "path to command with spaces"
    

    【讨论】:

    • 转义内部引号会产生:cmd /c "path to command with spaces": No such file or directory. 使用 cygpath -u "$1" 有效,但我宁愿努力让第一个解决方案发挥作用,因为我更愿意最小化地改变 bash 脚本.
    • 你确定 cmd 在路径中???因为找不到文件的 cmd 错误看起来是这样的:'path to command with spaces' is not recognized as an internal or external command, operable program or batch file.
    • 是的,如果您询问“带空格的命令路径”是否正确。 cygpath -u 使用相同的路径。
    • 不,我问过“cmd 是否在路径中”。 “命令”命令。 Cygwin 似乎在说它找不到“cmd”命令,所以尝试完整路径,例如/cygdrive/c/Windows/system32/cmd(可能因您的系统而异)
    • 我认为它在路径中; “哪个 cmd”产生 /cygdrive/c/Windows/system32/cmd。我尝试使用它,但它会导致相同的错误。似乎 bash 将完整命令解释为路径,而不是命令后跟路径。如果我在 "$cmd" 前面加上 eval,它也可以工作: eval "$cmd"。
    最近更新 更多