我有一个简单的脚本,其中第一个参数是为文件名保留的,所有其他可选参数应该传递给脚本的其他部分.
使用Google我发现了这个wiki,但它提供了一个文字示例:
echo "${@: -1}"
Run Code Online (Sandbox Code Playgroud)
我无法得到任何其他工作,例如:
echo "${@:2}"
Run Code Online (Sandbox Code Playgroud)
要么
echo "${@:2,1}"
Run Code Online (Sandbox Code Playgroud)
我从终端得到"坏替换".
问题是什么,除了传递给bash脚本的第一个参数外,我该如何处理?
如何在bash交互式shell中轻松获取前一个命令的倒数第二个(倒数第二个)单词/参数?我经常在后台运行命令,我想获取之前指定的文件&,例如,
% echo foo > /tmp/foo &
% cat !$
% &
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,!$给出最后一个单词,&.但我想要倒数第二个论点,/tmp/foo
请注意,可以使用类似范围的单词指示符!-1:3,但这对于具有大量单词的命令来说是不切实际的,其中不太明显有多少单词,例如,
% (set -x; date; pwd; git status; git diff; git log | tail -30; date; args=--verbose time make test; date) >& /tmp/log/make.test.20150122-Thu-0834 &
% echo !-1:30
/tmp/log/make.test.20150122-Thu-0834
Run Code Online (Sandbox Code Playgroud)
上面的示例有效,但您必须计算并知道您想要的单词是第30个单词,这非常耗时且容易出错.
有一个简单的方法来获得倒数第二个(倒数第二个)单词吗?
(请注意,此问题是指交互式shell中前一个命令的参数,而不是指从命令行传递给shell脚本的参数,因为这里的一些答案和注释是指.)
bash shell command-line command-line-arguments interactive-shell