如何根据最后的位置获取 bash 脚本参数?

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 个参数。我如何做到这一点?

Mat*_*ock 5

要从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)

记得检查长度;这可能会返回您的程序名称或空字符串。


Ljm*_*art 3

另外(库萨拉南达的回答):

#! /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 次

最近记录:

7 年,4 月 前