【问题标题】:How to save command-line-arguments in a variable and pass them to the command如何将命令行参数保存在变量中并将它们传递给命令
【发布时间】:2014-05-09 22:53:51
【问题描述】:

我想将一些参数放入变量 f.e.

CFLAGS=-c --sysroot=$sysroot

但是 bash 抱怨它没有找到文件 --sysroot... 为什么?如何将这些参数放入变量中,然后再将它们传递给程序。

另外我想做一些类似的事情:

for dir in ${include_dirs[*]};
do
    CFLAGS=$CFLAGS "-I$dir"
done

但这也没有按预期工作。

编辑:一种解决方案

CFLAGS=("-c" "--sysroot=$sysroot")

在循环中

CFLAGS=("${CFLAGS[0]}" "-I$dir")

我想知道是否有更明显的解决方案。

【问题讨论】:

  • --sysroot 错误之后的... 部分是什么?
  • 我添加到变量中的其他部分
  • 你几乎第一次就做对了。只需进行 2 处更改。 CFLAGS="-c --sysroot==$sysroot" 和循环中的 CFLAGS="$CFLAGS -I$dir"。在为变量赋值时,由于空格,您的原始帖子在两个地方都中断了。通过将空格括在引号内,问题得到解决。

标签: bash arguments command-line-arguments


【解决方案1】:

在 shell 中的引号非常重要,所以:

CFLAGS="-c --sysroot=$sysroot"

否则 BASH 会将其解释为 2 个不同的参数。

您也可以使用数组来存储它:

CFLAGS=("-c" "--sysroot=$sysroot")

稍后将它们用作:

"${CFLAGS[@]}"

引用数组扩展非常重要。

【讨论】:

猜你喜欢
  • 2019-12-19
  • 2020-08-20
  • 1970-01-01
  • 2021-05-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-10-11
相关资源
最近更新 更多