Bash 스크립트에서 매개변수를 반복하는 방법

Bash 스크립트에서 매개변수를 반복하는 방법

알 수 없는 수의 매개변수를 사용하여 bash 스크립트를 작성하고 싶습니다.

이러한 주장을 어떻게 이해하고 이에 대해 뭔가를 할 수 있습니까?

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

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

답변1

특별한 구문이 있습니다:

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

답변2

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

$@매개변수를 인용하거나 로 이스케이프하면 매개변수에 공백(또는 개행 등)이 포함될 수 있으므로 인용해야 합니다 \. 예를 들어:

./myscript one 'two three'

따옴표 때문에 세 개가 아닌 두 개의 인수가 됩니다. 를 인용하지 않으면 $@이러한 매개변수가 스크립트에서 폭발됩니다.

관련 정보