Yar*_*nST 3 shell shell-script
我有一个 shell 脚本,我想使用最后一个参数:
#!/bin/bash
echo My last param is #somehow put it here
Run Code Online (Sandbox Code Playgroud)
这是我尝试过的:
echo $$#
echo ${$#}
echo ${(($#))}
Run Code Online (Sandbox Code Playgroud)
不幸的是它没有奏效。
我特别想了解为什么我的选项不起作用,我想做一些类似双重扩展的事情。
在更广泛的意义上,我想知道如何从最后访问第 N 个参数。我如何做到这一点?
要从bash脚本中获取任何参数,您可以使用切片:
#!/bin/bash
# Get 3rd element from the end
from_end1=3
# Get last element
from_end2=1
# Get slice of array [end - from_end1 : end ] of length 1
echo "${@: -$from_end1: 1}"
echo "${@: -$from_end2: 1}"
Run Code Online (Sandbox Code Playgroud)
您还可以使用它来获取第 N 个元素:
# Get 2nd element
from_beginning=2
echo "${@: $from_beginning: 1}"
Run Code Online (Sandbox Code Playgroud)
记得检查长度;这可能会返回您的程序名称或空字符串。
另外(库萨拉南达的回答):
#! /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]}"
Run Code Online (Sandbox Code Playgroud)
如果您担心可移植性:
#!/bin/bash
penultimate=''
ultimate=''
for p in "$@" ; do
penultimate="$ultimate"
ultimate="$p"
done
echo "penultimate=$penultimate"
echo "ultimate=$ultimate"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4457 次 |
| 最近记录: |