그래서 주어진 인수에 따라 디렉터리의 모든 파일에 대해 for 루프를 실행하고 모든 파일과 디렉터리를 인쇄하는 함수를 만들고 있습니다.
#!/bin/bash
List () {
for item in $1
do
echo "$item"
done
}
List ~/*
그러나 스크립트를 실행하면 디렉터리의 첫 번째 파일만 인쇄됩니다.
어떤 아이디어가 있나요?
답변1
디렉토리의 파일을 반복하려는 경우 다음과 같이 디렉토리를 glob해야 합니다.
#!/bin/bash
List () {
for item in "${1}/"*
do
echo "$item"
done
}
그런 다음 다음과 같이 호출하십시오.
$ list ~
또는 여러 파일을 매개변수로 전달하려는 경우 for
다음과 같이 루프를 작성할 수 있습니다.
List () {
for item
do
echo "$item"
done
}
그러면 다음과 같이 호출될 수 있습니다.
$ list ~/*
현재 기능에 어떤 문제가 있나요?
glob으로 호출하면 디렉터리의 각 파일을 별도의 인수로 전달합니다. 홈 디렉토리에 file1
, file2
및 가 포함되어 있다고 가정합니다 file3
. 에 전화하면 list ~/*
실제로 다음과 같이 전화하게 됩니다.
list ~/file1 ~/file2 ~/file3
그러면 for
루프는 위치 매개변수 1만 전달하므로 for item in ~/file1
다른 위치 매개변수는 사용되지 않습니다.
/
또한 내가 완전히 놓쳤던 해시뱅의 a 도 잊어버렸다는 점을 지적해 주신 Ilkkachu에게 감사드립니다 .