bash 스크립트에서 인수를 반복하는 방법


16

알 수없는 양의 인수로 bash 스크립트를 작성하고 싶습니다.

이러한 논쟁을 어떻게 진행하고 그들과 함께 뭔가를 할 수 있습니까?

잘못된 시도는 다음과 같습니다.

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

답변:


28

이에 대한 특별한 구문이 있습니다.

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

보다 일반적으로, 현재 스크립트 또는 함수의 매개 변수 목록은 특수 변수를 통해 사용할 수 있습니다 $@.

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

주위에 큰 따옴표가 필요합니다 $@. 그렇지 않으면 매개 변수가 와일드 카드 확장 및 필드 분할을 겪습니다. "$@"큰 따옴표에도 불구하고 매개 변수가있는 한 많은 필드로 확장됩니다.

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

인용 $@할 경우 인수에 공백 (또는 줄 바꿈 등)이 포함되거나 인용 부호로 이스케이프 될 수 있으므로 인용해야합니다.\ . 예를 들면 다음과 같습니다.

./myscript one 'two three'

따옴표로 인해 세 가지가 아닌 두 가지 주장입니다. 을 인용하지 않으면 $@해당 인수가 스크립트 내에서 분리됩니다.


2
이에 대한 속기가 있습니다for f; do ...
글렌 잭맨
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.