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 でそれを行う前に、cf. 空白の分割がデフォルトで有効になっていない理由については、http://zsh.sourceforge.net/FAQ/zshfaq03.htmlを参照してください。

于 2012-06-02T21:12:14.243 に答える
7

コマンドに渡す前に文字列変数 (配列もあります) を単語に分割する場合は、 を使用します$=VAR。のような動作をさせるオプション (shwordsplit私が間違っていなければ) もありますが、設定しないことをお勧めします: (zsh: ) や(zsh: )のように入力するのは非常に不便です。command $VARcommand $=VARcommand "$VAR"command $VARcommand "${ARRAY[@]}"command $ARRAY

于 2011-09-09T19:53:38.153 に答える
5

を使えばうまくいきますeval $CMD $ARGS

于 2011-09-08T21:38:00.863 に答える