来自bash和sh的调用行的行为不同

问题描述 投票:-1回答:1

运行命令时

cmake ../../ -DCMAKE_C_FLAGS="-DFOO -DBAR ${CMAKE_C_FLAGS}"

在bash中,它工作正常。

通过脚本时,它失败:

./myscript "-DFOO -DBAR"

cmake ../../ -DCMAKE_C_FLAGS="-DFOO -DBAR ${CMAKE_C_FLAGS}"
Parse error in command line argument: -DBAR

的MyScript:

#!/bin/bash
cmake_options='-DCMAKE_C_FLAGS="'$1' ${CMAKE_C_FLAGS}"'
echo "cmake ../../ "$cmake_options
cmake ../../ $cmake_options

我知道它必须与以某种方式逃避字符有关,所以我尽我所能(双/单引号,反引号,转义反斜杠,使用$()等),但我找不到修复...

我不是linux专家,有人可以帮帮我吗?

PS:我正在研究cygwin,但我也在普通的Linux上测试过,行为是一样的。

编辑:

@Assere如上所述,我已经尝试了很多东西,从$ 1改为“$ 1”并没有解决问题。我的意思是“bash”直接在命令提示符中,而我的意思是“sh”是“myscript.sh”文件。我确实有#!/ bin / bash,我只是不知道它被称为shebang。我也尝试引用$ cmake_options,没有结果。

bash syntax
1个回答
1
投票

请改用此脚本:

#!/bin/bash
cmake_options=-DCMAKE_C_FLAGS="\"$1 \${CMAKE_C_FLAGS}\""
echo "cmake ../../ "$cmake_options
cmake ../../ "$cmake_options"
© www.soinside.com 2019 - 2024. All rights reserved.