$1 변수를 사용하여 스크립트에 제공된 파일에 대해 작업을 수행하는 스크립트를 작성 중입니다. 이 파일을 반복하는 가장 좋은 방법은 무엇입니까? 현재 나는 다음과 같은 것을 사용하여 스크립트를 하드 코딩했습니다.
for file in *.pdf
do
act on $file
done
하지만 저는 이 작업을 수행하기 위해 $1 변수를 사용하고 싶습니다. 감사합니다 Barry
답변1
$1
쉘 스크립트에 전달된 첫 번째 인수입니다. 따라서 스크립트가 있는 경우 myscript
이를 다음과 같이 부릅니다.
myscript somefile
그러면 $1
가 될 것입니다 somefile
. 내가 이렇게 부르면:
myscript *
그리고 현재 디렉토리에 다음 파일이 있습니다.
foo bar baz
그러면 $1
가 될 것입니다 foo
. 두 경우 모두 $1
값이 하나만 있고 반복할 항목이 없습니다.
매개변수를 반복하는 방법에는 여러 가지가 있습니다. 가장 일반적인 것은 다음과 같습니다.
for file in "$@"; do
echo doing something with "$file"
done
이는 다음과 $@
다릅니다 . "$@"
후자는 공백이 포함된 파일 이름을 올바르게 처리하는 특수 구조입니다. 다음을 수행할 수도 있습니다.
while [ -n "$1" ]; do
echo doing something with "$1"
shift
done
여기서 shift
명령은 첫 번째 인수를 제거하고 다음과 같이 $2
됩니다 . 비어 있지 $1
않은 한 $1
반복됩니다. 다음을 사용할 수도 있습니다 $#
(명령줄 인수 수를 포함하는 변수).
while [ $# -gt 0 ]; do
echo arg: "$1"
shift
done
답변2
당신이 그렇게한다면
script *.pdf
*.pdf
이미 명령줄에서 확장되었으며 $1
첫 번째 파일만 참조합니다.
for file in $1
따라서 필요한 작업을 수행하지 않습니다. 당신이 사용할 수있는
for file in "$@"
대신에.
리소스 섹션을 참조하세요.특수 매개변수내부에man bash