Получение последнего аргумента, переданного в сценарий оболочки - PullRequest
244 голосов
/ 06 декабря 2009

$1 - первый аргумент.
$@ это все из них.

Как мне найти последний аргумент, переданный в оболочку сценарий

Ответы [ 26 ]

1 голос
/ 26 февраля 2013

В последнем аргументе LAST будет установлен без изменения текущей среды:

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

Если другие аргументы больше не нужны и их можно сместить, их можно упростить до:

shift $(($#-1))
echo $1

По причинам переносимости:

shift $(($#-1));

можно заменить на:

shift `expr $# - 1`

Заменив также $() обратными кавычками, мы получим:

LAST=`{
   shift \`expr $# - 1\`
   echo $1
}`
echo $LAST
0 голосов
/ 06 декабря 2009
#! /bin/sh

next=$1
while [ -n "${next}" ] ; do
  last=$next
  shift
  next=$1
done

echo $last
0 голосов
/ 13 марта 2018

Использование расширения параметра (удалить соответствующее начало):

args="$@"
last=${args##* }

Также легко получить все до последнего:

prelast=${args% *}
0 голосов
/ 05 января 2015

Этот формат может работать в Slackware и Cygwin.

"$ {x [@]: (- 1)}", если используется с $ @, "$ {@: (- 1)}"

Это значит: $ {@ :( N)}, вернет все элементы после индекса N (включая N), -1 является последним.

0 голосов
/ 08 октября 2014

Существует гораздо более краткий способ сделать это. Аргументы скрипта bash могут быть перенесены в массив, что значительно упрощает работу с элементами. Приведенный ниже скрипт всегда будет печатать последний аргумент, переданный скрипту.

  argArray=( "$@" )                        # Add all script arguments to argArray
  arrayLength=${#argArray[@]}              # Get the length of the array
  lastArg=$((arrayLength - 1))             # Arrays are zero based, so last arg is -1
  echo ${argArray[$lastArg]}

Пример вывода

$ ./lastarg.sh 1 2 buckle my shoe
shoe
0 голосов
/ 31 октября 2013

Попробуйте следующий скрипт, чтобы найти последний аргумент

 # cat arguments.sh
 #!/bin/bash
 if [ $# -eq 0 ]
 then
 echo "No Arguments supplied"
 else
 echo $* > .ags
 sed -e 's/ /\n/g' .ags | tac | head -n1 > .ga
 echo "Last Argument is: `cat .ga`"
 fi

Выход:

 # ./arguments.sh
 No Arguments supplied

 # ./arguments.sh testing for the last argument value
 Last Argument is: value

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...