将 bash 变量作为参数传递给 gcc
pass bash variable as argument to gcc
我打算将一些变量值传递给 gcc。这是我的例子:
命令:
gcc -Q -fvpt -fwrapv -fwhole-program --help=optimizers
输出:
-fvpt [enabled]
-fwhole-program [enabled]
-fwrapv [enabled]
当我 运行:
var="-fvpt -fwrapv -fwhole-program"; gcc -Q $(var) --help=optimizers
输出:
-fvpt [disabled]
-fwhole-program [disabled]
-fwrapv [disabled]
为什么它不起作用?
$(var)
尝试执行命令 var
并在命令行中使用其输出。要扩展 bash 中的变量,您可以使用 $var
var="-fvpt -fwrapv -fwhole-program"; gcc -Q $var --help=optimizers
var="-fvpt -fwrapv -fwhole-program" && gcc -Q $var --help=optimizers
应该适合你。
您应该使用数组而不是扁平字符串来存储多个选项。 (例如,字符串有效,但对于本身包含空格的参数会失败,并且对于包含模式元字符的选项可能会失败。)
args=(-fvpt -fwrapv -fwhole-program)
gcc -Q "${args[@]}" --help=optimizers
我打算将一些变量值传递给 gcc。这是我的例子:
命令:
gcc -Q -fvpt -fwrapv -fwhole-program --help=optimizers
输出:
-fvpt [enabled]
-fwhole-program [enabled]
-fwrapv [enabled]
当我 运行:
var="-fvpt -fwrapv -fwhole-program"; gcc -Q $(var) --help=optimizers
输出:
-fvpt [disabled]
-fwhole-program [disabled]
-fwrapv [disabled]
为什么它不起作用?
$(var)
尝试执行命令 var
并在命令行中使用其输出。要扩展 bash 中的变量,您可以使用 $var
var="-fvpt -fwrapv -fwhole-program"; gcc -Q $var --help=optimizers
var="-fvpt -fwrapv -fwhole-program" && gcc -Q $var --help=optimizers
应该适合你。
您应该使用数组而不是扁平字符串来存储多个选项。 (例如,字符串有效,但对于本身包含空格的参数会失败,并且对于包含模式元字符的选项可能会失败。)
args=(-fvpt -fwrapv -fwhole-program)
gcc -Q "${args[@]}" --help=optimizers