在 UNIX 外壳中正确拆分字符串



我需要能够拆分一个字符串,以便每个字符串在我的 shell 中作为变量传递。

我尝试了这样的事情:

$ cat test.sh
#!/bin/sh
COMPOPT="CC=clang CXX=clang++"
$COMPOPT cmake ../gdcm

我也尝试了一个特定于 bash 的解决方案,但到目前为止没有运气:

$ cat test.sh
#!/bin/bash -x
COMPOPT="CC=clang CXX=clang++"
ARRAY=($COMPOPT)
"${ARRAY[0]}" "${ARRAY[1]}" cmake ../gdcm

我总是收到非信息性错误消息:

./test.sh: 5: ./t.sh: CC=clang: not found

当然,如果我直接从正在运行的外壳尝试,则可以

$ CC=clang CXX=clang++ cmake ../gdcm

另一个无eval的解决方案是使用 env 程序:

env "${ARRAY[@]}" cmake ../gdm

它为通常的FOO=BAR command语法提供了间接级别。

当你说:

$COMPOPT cmake ../gdcm

命令行管理程序将尝试将变量的值作为命令执行。

在这种情况下,邪恶eval相当方便。 说:

eval $COMPOPT cmake ../gdcm

虽然 devnull 的答案有效,但使用了eval,这已经知道陷阱了。

这是一种无需调用eval即可完成的方法:

#!/bin/sh
COMPOPT="CC=clang CXX=clang++"
sh -c "$COMPOPT cmake ../gdcm"

即将整个命令行传递给sh(或 bash)。

相关内容

  • 没有找到相关文章

最新更新