
다음 명령을 실행할 때
./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