1

У меня есть скрипт, который я хочу принять любое количество аргументов командной строки.

Пока у меня есть

if [ -O $1 ] ; then
  echo "you are the owner of $1"
else
  echo "you are not the owner of $1"
fi

Очевидно, что если бы я хотел, чтобы скрипт принимал только один аргумент, это работало бы, но то, что работало бы для ЛЮБОГО числа аргументов.

ex.  ./script f f1 f2 f3

3 ответа3

10

Один из возможных способов сделать то, что вы хотите, - это $@ , который представляет собой массив всех переданных аргументов.

for item in "$@"; do
  if [ -O "$item" ]; then
    echo "you are the owner of $item"
  else
    echo "you are not the owner of $item"
  fi
done
3

Ну, это зависит от того, что именно вы хотите сделать, но посмотрите на $* , $@ и shift .

2

«$ @» не решает его проблему "ЛЮБОГО количества аргументов". Существует ограничение на длину командной строки (http://www.in-ulm.de/~mascheck/various/argmax/). лучший способ читать в "неограниченных аргументах" - через STDIN:

prg_which_creates_arguments | while read a; do \
    echo "do something with $a"; \
done

просто создайте аргументы и передавайте их один за другим в коде, который что-то с ними делает.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .