如何在不同参数的bash中重复使用命令?

问题描述:

我有两个脚本,经常需要使用相同的参数来运行:如何在不同参数的bash中重复使用命令?

$ populate.ksh 9241 && check.ksh 9241 

当我需要改变(在这个例子中)的参数,我可以回去和编辑在历史上的线。但是由于我需要在两个地方改变这个数字,所以我有时会犯一个错字。我希望能够只改变一次参数来在两个地方改变它。

在bash:

!!:gs/9241/9243/ 

是的,它使用gs///,而不是s///g。 :-)

(zigdon的答案使用的最后一个命令开始pop,如populate.sh。我的回答使用的最后一个命令,句号,选择一种适合你。)

一种解决方案是简单地创建一个包装脚本(populate_check.ksh),反过来调用脚本:

r=$1 
populate.ksh $r && check.ksh $r 

或者多个参数:

for r; do 
    populate.ksh $r && check.ksh $r 
done 

对于那些任务更短暂,您还可以参数化命令,以便在历史中编辑更容易:

$ r=9241; populate.ksh $r && check.ksh $r 

或者做几一次:

$ for r in 9241 9242; do populate.ksh $r && check.ksh $r; done 
+0

不要说“对r $ *”;宁愿说“替代”。后者允许您使用空格或其他IFS字符指定参数。 – 2008-10-14 20:24:27

+0

对于潜伏者和档案:对于那些不幸使用不支持较短形式的shell的人,“for r”等同于“$ @”中的r。 – 2008-10-14 20:25:31

您还可以使用历史替换功能:

!pop:gs/9241/1234 

像这样:

$ populate.ksh 9241 && check.ksh 9241 
... 
$ !pop:gs/9241/1234 
populate.ksh 1234 && check.ksh 1234 
... 

正确答案已经给出,但为了更全面的理解,请阅读手册页,特别注意“History Expansion”和相关的shell变量(如“HISTCONTROL”,“histchars”等)。顺便说一句 - 你的寻呼机的搜索功能是非常有用的,当阅读man bash