我需要能够分割一个字符串,以便每个字符串在我的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
当然,如果我直接尝试从正在运行的shell中运行:
$ CC=clang CXX=clang++ cmake ../gdcm
答案 0 :(得分:2)
另一个eval
- 免费解决方案是使用env
程序:
env "${ARRAY[@]}" cmake ../gdm
提供了通常FOO=BAR command
语法的间接级别。
答案 1 :(得分:1)
答案 2 :(得分:1)
虽然devnull的答案有效,但使用eval
并且已知存在陷阱。
这是一种可以在不调用eval
的情况下完成的方式:
#!/bin/sh
COMPOPT="CC=clang CXX=clang++"
sh -c "$COMPOPT cmake ../gdcm"
即。将整个命令行传递给sh
(或bash)。