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:エラー::そのようなファイルまたはディレクトリがありません
gcc:エラー::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 に答える