如何在Shell命令中交换参数

时间:2014-01-29 18:21:05

标签: bash shell command

我在shell中有一个带参数的命令。像

Command -a -b

假设a b是非常长的目录名,并且它们并不总是第一个和最后一个参数。

但是,我需要再次使用此命令。我使用ctrl+p返回命令,但这次我需要撤销a b订单。

Command -b -a

有没有办法快速交换它们,而不是重新输入它们?

提前致谢。

3 个答案:

答案 0 :(得分:13)

是的,您可以使用history substitution

$ echo foo bar
foo bar
$ !:0 !:2 !:1          # previous command with second arg then first arg
echo bar foo
bar foo
$ 

答案 1 :(得分:9)

您可以使用 Alt + t 来交换当前和之前的单词。

Here还有一些快捷方式。

请注意你交换单词,而不是参数。如果您混淆了订单grep获取grep ~/Documents/myFile searchString中的参数并希望将其更正为grep searchString ~/Documents/myFile Alt + t 将无济于事你。

转而使用Paul's answer并执行!:0 !:2 !:1

如果您输入的内容太不方便(适合我),您可以在~/.bash_alias中为其创建别名:

# Swap the first and the second argument of the last command
alias swapArgs='$(history -p !:0 !:2 !:1)'

答案 2 :(得分:2)

您可以轻松地剪切并粘贴最后一个arg到另一个地方,而不是交换args。 Ctrl-W将删除最后一个参数,Ctrl-Y将粘贴它。

$ # Cursor position is shown as |
$ ls foo bar|

$ # Press <Ctrl-W> to cut the argument just before the cursor
$ ls foo |

$ # Now press <Alt-B> to move the cursor one argument back
$ ls |foo

$ # Now press <Ctrl-Y> to paste the cut argument
$ ls bar|foo

$ # Now press <space> to insert a space between the arguments
$ ls bar |foo

$ # You can safely press <enter> while the cursor is in the middle of the line
$ ls bar |foo
bar foo