Pau*_*ce. 283
这只是Bash:
echo "${@: -1}"
Run Code Online (Sandbox Code Playgroud)
Lau*_*ves 169
这有点像黑客:
for last; do true; done
echo $last
Run Code Online (Sandbox Code Playgroud)
这个也很可移植(再次,应该使用bash,ksh和sh)并且它不会移动参数,这可能很好.
for如果你不告诉它要循环的内容,它使用隐式循环遍历参数的事实,以及for循环变量没有作用域的事实:它们保留它们设置的最后一个值.
小智 78
$ set quick brown fox jumps
$ echo ${*: -1:1} # last argument
jumps
$ echo ${*: -1} # or simply
jumps
$ echo ${*: -2:1} # next to last
fox
Run Code Online (Sandbox Code Playgroud)
该空间是必要的,因此它不会被解释为默认值.
Kev*_*tle 73
对于bash 3.0或更高版本,最简单的答案是
_last=${!#} # *indirect reference* to the $# variable
# or
_last=$BASH_ARGV # official built-in (but takes more typing :)
Run Code Online (Sandbox Code Playgroud)
而已.
$ cat lastarg
#!/bin/bash
# echo the last arg given:
_last=${!#}
echo $_last
_last=$BASH_ARGV
echo $_last
for x; do
echo $x
done
Run Code Online (Sandbox Code Playgroud)
输出是:
$ lastarg 1 2 3 4 "5 6 7"
5 6 7
5 6 7
1
2
3
4
5 6 7
Run Code Online (Sandbox Code Playgroud)
Mar*_*ers 29
使用索引结合长度:
echo ${@:${#@}}
Run Code Online (Sandbox Code Playgroud)
Tah*_*koz 28
以下内容适合您.@是参数数组.:意思是.$#是参数数组的长度.结果是最后一个元素:
${@:$#}
Run Code Online (Sandbox Code Playgroud)
例:
function afunction{
echo ${@:$#}
}
afunction -d -o local 50
#Outputs 50
Run Code Online (Sandbox Code Playgroud)
Agi*_*bra 23
在寻找将最后一个参数与前一个参数分开时发现这一点.虽然有些答案确实得到了最后一个论点,但如果你还需要所有其他的args,它们也没什么帮助.这样做效果更好:
heads=${@:1:$(($# - 1))}
tail=${@:$#}
Run Code Online (Sandbox Code Playgroud)
小智 19
这适用于所有POSIX兼容的shell:
eval last=\${$#}
Run Code Online (Sandbox Code Playgroud)
资料来源:http://www.faqs.org/faqs/unix-faq/faq/part2/section-12.html
Mic*_*jer 11
这是我的解决方案:
eval码:
ntharg() {
shift $1
printf '%s\n' "$1"
}
LAST_ARG=`ntharg $# "$@"`
Run Code Online (Sandbox Code Playgroud)
shift `expr $# - 1`
echo "$1"
Run Code Online (Sandbox Code Playgroud)
这会将参数移动参数数量减 1,并返回第一个(也是唯一的)剩余参数,这将是最后一个。
我只在 bash 中测试过,但它也应该在 sh 和 ksh 中工作。
仅用于bash(自2.01版开始)
$ set -- The quick brown fox jumps over the lazy dog
$ printf '%s\n' "${!#} ${@:(-1)} ${@: -1} ${@:~0} ${!#}"
dog dog dog dog dog
Run Code Online (Sandbox Code Playgroud)
对于ksh,zsh和bash:
$ echo "${@: -1} ${@:~0}" # the space beetwen `:` and `-1` is a must.
dog dog
Run Code Online (Sandbox Code Playgroud)
对于“倒数第二个”:
$ echo "${@:~1:1}"
lazy
Run Code Online (Sandbox Code Playgroud)
要解决以破折号(如-n)开头的参数的任何问题,请使用printf:
$ printf '%s\n' "${@:~0}"
dog
Run Code Online (Sandbox Code Playgroud)
对于所有外壳程序和较旧版本sh(适用于空格和glob字符):
$ set -- The quick brown fox jumps over the lazy dog "the * last argument"
$ eval echo "\"\${$#}\""
The last * argument
Run Code Online (Sandbox Code Playgroud)
或者,如果您想设置一个last变量:
$ eval last=\${$#}; echo "$last"
The last * argument
Run Code Online (Sandbox Code Playgroud)
对于“倒数第二个”:
$ eval echo "\"\${$(($#-1))}\""
dog
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
118695 次 |
| 最近记录: |