示例 Bash 脚本:
#!/bin/bash
echo $0
echo $1
运行此为
$ ./prog foo
将打印:
./prog
foo
所以我知道如何在 shell 程序中获取位置参数。
我想弄清楚的是,如何对任何其他 shell 命令执行相同的操作。像mv
,例如,我希望能够说
mv file1 .file1.bak
但是我不想两次都输入file1。
我尝试了与上面的外壳脚本相同的方法。
$ echo a b c $0 $1 $2
但是这个印刷
a b c -zsh
我认为这可能只是一个特定于外壳的东西,所以我在bash
中运行了它。
a b c bash
TL;DR:如何在扩展中从 shell 命令中获取位置参数?
您可以使用以下方法之一:
!^ first argument
!$ last argument
!* all arguments
!:2 second argument
!:2-3 second to third arguments
!:2-$ second to last arguments
!:2* second to last arguments
!:2- second to next to last arguments
!:0 the command
!! repeat the previous line
前任:
echo a b c d e
> a b c d e
echo !$
> echo e
> e
echo "a" "b" "c" "d" "e"
> a b c d e
echo "!:2"
> echo ""b""
> b
这些是操纵 bash 历史的命令。
(我看到你在用zsh,但我给你一个bash答案(
您可以使用 bash 历史扩展来提取第一个参数。在这里,使用echo
而不是mv
进行演示:
$ echo file1 .!#:1.bak
echo file1 .file1.bak
file1 .file1.bak
哪里
!#
是到目前为止您键入的当前行:1
是当前行中的第一个参数
如果您不需要前导点,大括号扩展也是一个不错的选择
$ echo file1{,.bak}
file1 file1.bak