Как записать сценарий для принятия какого-либо количества параметров командной строки? (UNIX, BASH)

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

До сих пор я имею

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
2
задан 11.10.2009, 11:37

3 ответа

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

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
11
ответ дан 08.12.2019, 04:37
  • 1
    Гм, видит то, что происходит, когда Вы работаете script "arg with spaces". Это может или не может относиться к Вашей ситуации. После того как Вы сделаны, поместите doublequotes вокруг $@ и $item. – wfaulk 08.10.2009, 03:15
  • 2
    . Фиксированный. – jtbandes 08.10.2009, 03:27

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

3
ответ дан 08.12.2019, 04:37

"$" не решает его проблему "НИКАКОГО количества аргументов". существует предел в том, какой длины командная строка может быть (http://www.in-ulm.de/~mascheck/various/argmax/). лучший способ читать в "неограниченных аргументах" через STDIN:

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

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

2
ответ дан 08.12.2019, 04:37

Теги

Похожие вопросы