bash 스크립트에서 $1을 사용하여 * 파일을 반복합니다.

bash 스크립트에서 $1을 사용하여 * 파일을 반복합니다.

$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

관련 정보