【问题标题】:assign last positional parameter to variable and remove it from "$@"将最后一个位置参数分配给变量并将其从“$@”中删除
【发布时间】:2020-09-25 09:09:03
【问题描述】:

在我的/bin/sh 脚本中,我需要传递不确定数量的位置参数,并获取最后一个(将最后一个分配给变量$LAST),然后从$@ 中删除最后一个参数

例如,我用 4 个参数调用我的脚本:

./myscript.sh AAA BBB CCC DDD

在我的脚本中,我需要回显以下内容:

echo $LAST
DDD

echo $@
AAA BBB CCC

我怎样才能做到这一点?

【问题讨论】:

  • @l0b0 - 不,它没有。这些解决方案仅适用于 bash。
  • @400theCat, Re "...only work in bash":更正 -- Getting the last argument passed to a shell script 的 28 个答案中有 一些 是 @仅限 987654328@,但其他一些答案适用于 POSIX 外壳。
  • @agc 但是,该问题并未询问如何删除最后一个位置参数。
  • 将脚本更改为将DDD 作为第一个参数,然后是AAABBBCCC 会容易得多。

标签: shell command-line sh


【解决方案1】:

使用循环将除最后一个以外的所有参数移动到位置参数列表的末尾;以便最后一个成为第一个,可以由$1 引用,并且可以使用shift 从列表中删除。

#!/bin/sh -
count=0
until test $((count+=1)) -ge $#
do
  set -- "$@" "$1"
  shift
done

LAST=${1-}
shift $((!!$#))

echo "$LAST"
echo "$@"

【讨论】:

    猜你喜欢
    • 2017-05-11
    • 1970-01-01
    • 1970-01-01
    • 2013-02-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-07
    • 1970-01-01
    相关资源
    最近更新 更多