1

如果我运行此脚本:(注意:已编辑以反映答案 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: error: : No such file or directory
gcc: error: : No such file or directory
错误 gcc 编译

4

1 回答 1

0

第一个变化:

gcc " $gcc_options $1"

至:

gcc "$gcc_options" "$1"

如果其中一些变量包含多个单词,您可能需要打开shwordsplit(参见此处),这也可以在每个变量的基础上完成(${=VAR})。

gcc "${=gcc_options}" "${=1}"

更新

我犯了一个错误,你肯定不想要引号$gcc_options,所以它可能应该是${=gcc_options}。是否需要引用$1取决于是否$1包含空格。所以这应该这样做:

gcc ${=gcc_options} $1
于 2012-07-25T02:34:04.740 回答