14

我正在尝试运行这样的程序:

$CMD $ARGS

其中 $ARGS 是一组带空格的参数。但是,zsh 似乎将 $ARGS 的内容作为单个参数传递给可执行文件。这是一个具体的例子:

$export ARGS="localhost -p22"
$ssh $ARGS
ssh: Could not resolve hostname localhost -p22: Name or service not known

是否有控制此行为的 bash 或 zsh 标志?

请注意,当我将这种类型的命令放在 $!/bin/sh 脚本中时,它会按预期执行。

谢谢,

SetJmp

4

3 回答 3

19

在 zsh 中很容易:

用于按单词cmd ${=ARGS}拆分为单独的参数(按空格拆分)。$ARGS

用于按行cmd ${(f)ARGS}拆分$ARGS为单独的参数(按换行符拆分,但不拆分空格/制表符)。

正如其他人所提到的,设置 SH_WORD_SPLIT 默认情况下会发生分词,但在您在 zsh 中执行此操作之前,请参阅。http://zsh.sourceforge.net/FAQ/zshfaq03.html解释为什么默认情况下不启用空白分割。

于 2012-06-02T21:12:14.243 回答
7

如果您想在传递给命令之前将字符串变量(也有数组)拆分为单词,请使用$=VAR. 还有一个选项(shwordsplit如果我没记错的话)会使任何command $VAR行为都像,但我建议不要设置它:我发现键入(zsh: ) 和(zsh: )command $=VAR之类的东西非常不方便。command "$VAR"command $VARcommand "${ARRAY[@]}"command $ARRAY

于 2011-09-09T19:53:38.153 回答
5

如果您使用eval $CMD $ARGS.

于 2011-09-08T21:38:00.863 回答