如果我运行此脚本:(注意:编辑以反映答案1)
#!/usr/bin/env zsh
setopt shwordsplit
if [[ -f $1 ]]
then
echo "will compile $1"
else
echo "ERROR: $1 NOT found"
exit 1
fi
gcc_options=" -c -std=c99 -Wall -Wextra "
echo "gcc_options: ${gcc_options}"
gcc " ${=gcc_options} " " ${=1} "
if [[ $? -eq 0 ]]
then
echo "gcc compile worked"
else
echo "error in gcc compile"
fi
gcc "${=gcc_options}" "${=1}"
if [[ $? -eq 0 ]]
then
echo "gcc compile worked"
else
echo "error in gcc compile"
fi
两个编译都失败了。
输出是:
将编译my_file.c
gcc_options:-c -std = c99 -Wall -Wextra
gcc:错误::没有这样的文件或目录
gcc:错误::没有这样的文件或目录
gcc:错误:my_file.c:没有这样的文件或目录
gcc:致命错误:没有输入文件编译终止
gcc编译中的错误
gcc:错误::没有这样的文件或目录
gcc:错误::没有这样的文件或目录
gcc编译中的错误
答案 0 :(得分:0)
首先改变:
gcc " $gcc_options $1"
要:
gcc "$gcc_options" "$1"
如果其中一些变量包含多个字词,您可能需要启用shwordsplit
(请参阅here),这也可以基于每个变量(${=VAR}
)完成。
gcc "${=gcc_options}" "${=1}"
我犯了一个错误,你绝对不想在$gcc_options
上引用,所以应该是${=gcc_options}
。如果需要引用$1
取决于$1
是否包含空格。所以这应该做:
gcc ${=gcc_options} $1