bash / zshは後で使用するために前のコマンドを表す最後の引数を使用しますが、この引数には$_
ドキュメントの「拡張バージョン」が含まれています。拡張されていないバージョンを持つことができるものはありますか?次の例のようになります。
printf "%s\n" something{1..3}
。something{1..3}
さらに、後続のコマンドで拡張されていないパラメータにアクセスしたいと思います。something3
これを行うと、まだ誰もではなく最後の引数にのみ追加されます。
bash -c '
printf "%s\n" "$@" && printf "%s\n" "$@"-add-something-more;
' _ something{1..3}
繰り返しますがzsh
、トリックなしでこれを達成する方法はありますかeval
?私はこの方法を使用するのが好きではありませんが、正確に私が何をしたいのかを見せたいですか?
bash -c '
eval printf "%s\\\n" "$@" && eval printf "%s\\\n" "$@"-add-something-more;
' _ 'something{1..3}'
something1
something2
something3
something1-add-something-more
something2-add-something-more
something3-add-something-more
メモ:
- コマンドはスクリプト内で実行され、パラメーターはユーザーによってスクリプトに渡されるため、履歴から読み取るのはオプションではありません。
- 私は成功した場合にのみ実行するために構文を使用します
command1 "$@" && command2 "$@"<question-part>
。command2
command1
答え1
パラメータリストを複数回再利用するには、通常これは(匿名)関数または変数の目的です。
存在するzsh
:
() {cmd1 "$@" && cmd2 "$@"} something{1..3}
l=(something{1..3}); cmd1 $l && cmd2 $l
各パラメータに同じ文字列を追加するには、次の$^array
構文を使用します。
$ () {echo $@; echo $^@-more} a{1..3}
a1 a2 a3
a1-more a2-more a3-more
(bash
//ksh
これにzsh
対応するのは)です"${@/%/-more}"
。
拡張されていないバージョンを取得するには$_
:
TRAPDEBUG() last_cmd=($cur_cmd) cur_cmd=("${(z)ZSH_DEBUG_CMD}")
それから:
$ echo a{1..3}; echo $last_cmd[-1]
a1 a2 a3
a{1..3}
DEBUG
ただし、トラップが実行されることに注意してください。今後各サブリスト、いいえ管路、言及する必要がない注文する。だからこれはうまくいきませんecho a{1..3} && echo $last_cmd[-1]
。以下を行う必要があります。
$ eval 'echo a{1..3}' && eval 'echo $last_cmd[-1]'
a1 a2 a3
a{1..3}