当应用于命令时,如何强制bash/zsh将参数计算为多个参数

Set*_*jmp 9 command arguments zsh expansion

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

$CMD $ARGS
Run Code Online (Sandbox Code Playgroud)

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

$export ARGS="localhost -p22"
$ssh $ARGS
ssh: Could not resolve hostname localhost -p22: Name or service not known
Run Code Online (Sandbox Code Playgroud)

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

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

谢谢,

那么setjmp

Mic*_*rth 11

在zsh中很简单:

用于按字cmd ${=ARGS}分割$ARGS成单独的参数(在空格上拆分).

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

正如其他人提到的那样,设置SH_WORD_SPLIT会使默认情况下发生单词拆分,但在zsh中执行此操作之前,请参阅 http://zsh.sourceforge.net/FAQ/zshfaq03.html以获取有关默认情况下未启用空白分割的原因的说明.


ZyX*_*ZyX 7

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


Tom*_*ych 5

如果你使用它就会起作用eval $CMD $ARGS