이 bash 스크립트가 작동하지 않는 이유는 무엇입니까?

이 bash 스크립트가 작동하지 않는 이유는 무엇입니까?

다음 명령을 실행할 때

./command *

이 스크립트를 사용하여

#!/bin/bash

for f in ./$1
do
    echo $f
done

$1에 지정된 첫 번째 파일만 에코됩니다. 내 질문은 왜?

답변1

명령을 실행할 때 간단한 따옴표나 큰따옴표를 사용하지 않았기 때문입니다.

./command '*'

또는:

./command "*"

또는 확실히 사용하려면 ./command *스크립트에서 다음과 같이 수정하십시오.

#!/bin/bash

for f in ./"$@"
do
    echo $f
done

이는 $1명령의 첫 번째 인수를 참조하고 $@명령의 모든 인수를 참조하기 때문입니다.

이런 의미에서 일부 문서도 읽어보세요.http://tldp.org/LDP/abs/html/internalvariables.html#APPREF

답변2

*명령을 실행하면 쉘이 확장됩니다 . 따라서 스크립트를 실행하는 것은 다음과 같습니다.

./command file1.txt file2.txt file3.txt

$1첫 번째 인수에 해당하므로 루프에는 한 번의 반복만 있습니다.

답변3

$1첫 번째 인수만 참조합니다. 을 사용해야 합니다 $*.

#!/bin/bash

for f in $*
do
     echo $f
done

관련 정보