jak przeglądać argumenty w skrypcie bash


16

Chciałbym napisać skrypt bash z nieznaną ilością argumentów.

Jak mogę przejść przez te argumenty i coś z nimi zrobić?

Zła próba wyglądałaby następująco:

#!/bin/bash
for i in $args; do 
    echo $i
done

Odpowiedzi:


28

Jest do tego specjalna składnia:

for i do
  printf '%s\n' "$i"
done

Mówiąc bardziej ogólnie, lista parametrów bieżącego skryptu lub funkcji jest dostępna poprzez specjalną zmienną $@.

for i in "$@"; do
  printf '%s\n' "$i"
done

Zauważ, że potrzebujesz podwójnych cudzysłowów $@, w przeciwnym razie parametry ulegną rozszerzeniu z użyciem symboli zastępczych i podziałowi pól. "$@"to magia: pomimo podwójnych cudzysłowów, rozszerza się na tyle pól, ile jest parametrów.

print_arguments () {
  for i in "$@"; do printf '%s\n' "$i"; done
}
print_arguments 'hello world' '*' 'special  !\characters' '-n' # prints 4 lines
print_arguments ''                                             # prints one empty line
print_arguments                                                # prints nothing

5
#! /usr/bin/env bash
for f in "$@"; do
  echo "$f"
done

Powinieneś zacytować, $@ponieważ możliwe jest, że argumenty zawierają spacje (lub znaki nowego wiersza itp.), Jeśli zacytujesz je, lub unikniesz ich za pomocą \. Na przykład:

./myscript one 'two three'

To dwa argumenty zamiast trzech ze względu na cytaty. Jeśli nie zacytujesz $@, argumenty zostaną podzielone w skrypcie.


2
Jest na to skrótfor f; do ...
glenn jackman
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.