Як написати скрипт, щоб прийняти будь-яку кількість аргументів командного рядка? (UNIX, BASH)


1

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

Поки що маю

якщо [-O $ 1]; потім
  відлуння "ви власник $ 1"
ще
  відлуння "ви не власник $ 1"
фі

Очевидно, якби я хотів, щоб сценарій прийняв лише один аргумент, це спрацювало б, але що б спрацювало для будь-якої кількості аргументів.

колишній ./script f f1 f2 f3

1
Якщо щось відповіло на ваше запитання, чи можете ви позначити це як відповідь (натисніть на галочку)? Дякую.
jtbandes

Відповіді:


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
Гм, подивіться, що станеться, коли ти біжиш script "arg with spaces". Це може бути або не мати відношення до вашої ситуації. Як тільки ви закінчите, поставте подвійні лапки навколо $@і $item.
wfaulk

Влучне зауваження. Виправлено.
jtbandes

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

просто створіть аргументи і передайте їх один одному за іншим кодом, який щось робить з ними.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.