알 수 없는 수의 매개변수를 사용하여 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'
따옴표 때문에 세 개가 아닌 두 개의 인수가 됩니다. 를 인용하지 않으면 $@
이러한 매개변수가 스크립트에서 폭발됩니다.