![查看所有 Bash/Shell 脚本相关的常见问题解答](https://www.alaica.com/wp-content/uploads/linux-61.png)
我正在编写一个 bash 包装脚本,它将向命令传递参数。如果我按如下方式调用包装器,我需要找出最后一个参数:
./wrapper -a -b --longarg=foo thisfilename.txt
./wrapper -a -b thisfilename.txt
./wrapper -a --next= true thisfilename.txt
其中,
→ $@ 是全部。
→ $0 是脚本名称。
→ $1 是第一个参数。我希望 thisfilename.txt 存储在名为$last
的 shell 变量中。如何在类 Unix 操作系统下找到传递给用 bash 或 ksh 编写的 shell 脚本的最后一个参数?
教程详情 | |
---|---|
难度级别 | 简单的 |
根权限 | 不 |
要求 | Linux 或 Unix 终端 |
类别 | Linux shell 脚本 |
先决条件 | 巴什 |
操作系统兼容性 | BSD • Linux • macOS • Unix |
美东时间。阅读时间 | 1分钟 |
您可以使用以下任一 bash 语法找到传递给 shell 脚本的最后一个参数。
Bash 获取传递给 Shell 脚本的最后一个参数
请尝试以下操作:
## 仅适用于 bash / ksh ## echo " ${@: -1} "
以下内容仅适用于 bash v3.x+:
回声 “ ${BASH_ARGV[0]} ”
示例 shell 脚本:
#!/bin/bash echo "仅最后一个参数(仅适用于 bash/ksh):${@: -1} " echo "仅最后一个参数(仅适用于 bash 3.x+):${!#} " echo "仅最后一个参数(仅适用于 bash 3.x+):$BASH_ARGV " echo "仅最后一个参数(仅适用于 bash 3.x+ / ksh):${@:$#} " echo "仅最后一个参数(适用于仅 bash 3.x+): ${BASH_ARGV[0]} " echo -n "仅最后一个参数(便携式版本): " for i in $ @ ; 做:; 完成 回显 “ $i ”
按如下方式运行:
$ ./script -a -b --foo thisfilename.txt
示例输出:
仅最后一个参数(仅适用于 bash/ksh):thisfilename.txt 仅最后一个参数(仅适用于 bash 3.x+):thisfilename.txt 仅最后一个参数(仅适用于 bash 3.x+):thisfilename.txt 仅最后一个参数(仅适用于 bash 3.x+/ksh):thisfilename.txt 仅最后一个参数(仅适用于 bash 3.x+):thisfilename.txt 仅最后一个参数(便携式版本):thisfilename.txt
另一个测试:
示例输出:
$ ./script -a -b --foo --next=true thisfilename.txt 'this is a weird file.txt'
$ ./script -a -b --foo --next=true thisfilename.txt
仅最后一个参数(仅适用于 bash/ksh):thisfilename.txt 仅最后一个参数(仅适用于 bash 3.x+):thisfilename.txt 仅最后一个参数(仅适用于 bash 3.x+):thisfilename.txt 仅最后一个参数(仅适用于 bash 3.x+/ksh):thisfilename.txt 仅最后一个参数(仅适用于 bash 3.x+):thisfilename.txt 仅最后一个参数(便携式版本):thisfilename.txt
关于便携版的说明
下面的代码:
# 双引号 '$@' 以避免重新分割 i in "$@"中的元素问题;做:; 完成echo “最后一个参数:$i ”
可以写成如下:
#------------------------------------------------- ----------------------------------------------------# # 它是如何工作的? # 如果你不知道要循环什么,shell 将循环参数,即 $@ 。 # 这是默认值。 #------------------------------------------------- - - - - - - - - - - - - - - - - - - - - # 为我; 做:; 完成 echo “最后一个参数:$i ”
它应该可以毫无问题地与 sh、ksh 和 bash 一起使用。
如何找出 $@ 中最后一个参数之前的所有命令行参数?
- 请参阅我们之前的常见问题解答以获取更多信息:Bash 获取 $@ 中最后一个参数之前的所有命令行参数