Скрипт Bourne Shell для распечатки последнего аргумента - PullRequest
0 голосов
/ 05 октября 2011

Я пытаюсь создать сценарий оболочки Bourne, который будет принимать 0 или более arugment и распечатывать последний arugment, я привык писать на Java, и я очень смущен этим, медленно начинаю изучать C.

Ответы [ 5 ]

3 голосов
/ 06 октября 2011

Альтернатива @ решению Михаэля:

#!/usr/bin/env bash
echo "${@: -1}"
  • $@ - это массив со всеми параметрами.
  • : используется для обычного разбиения строк (выможно попробовать это с echo "${USER: -1}", чтобы убедиться, что он печатает последний символ вашего имени пользователя), но также можно использовать для массивов, чтобы получить последний элемент .
  • В фигурные скобкинеобходимо, чтобы индексирование массива работало
  • Кавычки - это просто хорошая практика, чтобы сделать код более гибким в случае, если вы хотите смешать другие переменные, или если значение нужно использовать в выражении, которое требует пустогострока, а не ничего в случае отсутствия параметров (например, if [ "${@: -1}" = "--help" ])
2 голосов
/ 05 октября 2011
lastArg=`echo $@ | awk '{print $NF}'`
2 голосов
/ 05 октября 2011

Вот короткий Bash-скрипт, который сделает это:

#!/usr/bin/env bash

echo "${!#}"

Это не сценарий оболочки Bourne. Аргументы не читаются с клавиатуры командой read. Вместо этого они указываются в командной строке при запуске вашего скрипта. Например, если вы поместите этот текст в script.sh и запустите ./script.sh a b c d e, он выведет:

e
0 голосов
/ 24 января 2015

Это должно работать:

eval lastarg='$'$#
echo last arg is $lastarg

Это работает с /bin/sh, являющимся bash или dash.

Я не могу проверить это с "реальным" /bin/sh что бы это ни было.

0 голосов
/ 05 октября 2011

В Баш:

last_arg=`echo $* | rev | cut -d " " -f1 | rev`;
echo $last_arg

Ваш вопрос упоминает C. В C легче:

int main (int argc, char *argv[]) {
     char *last_arg = argv[argc - 1];
     [...]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...