For 루프는 매개변수가 있는 함수에서 작동하지 않습니다.

For 루프는 매개변수가 있는 함수에서 작동하지 않습니다.

그래서 주어진 인수에 따라 디렉터리의 모든 파일에 대해 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에게 감사드립니다 .

관련 정보