Linux는 배열을 별도의 변수로 분할합니다.

Linux는 배열을 별도의 변수로 분할합니다.

저는 수년 동안 MVS에서 프로그래밍을 해왔고 최근에는 Linux를 사용하여 프로그래밍을 해왔기 때문에 아직 Linux 기술이 뛰어나지는 않지만 개발 개념은 꽤 잘 이해하고 있습니다.

내가 원하는 것은 파일 디렉터리를 읽고 확장자가 .trg인 모든 파일의 이름을 얻는 것입니다. 그런 다음 나중에 스크립트에서 구성 요소를 참조하고 파일 이름 지정에 사용할 수 있도록 이러한 이름을 가져와 별도의 변수에 저장해야 합니다. 파일 이름을 얻기 위해 find 명령을 사용했습니다.

param=`find *${file_name}*.trg

이로 인해 값(ABC1099R ABC1099C)이 로드된 $param 변수가 생성되었으며 이 변수는 ABC1099R.trg 및 ABC1099C.trg라는 디렉터리에 있는 두 개의 파일이므로 이제 나중에 이 값을 개별 변수에 할당해야 합니다. 스크립트. 온라인에서 여러 번 검색했지만 내가 찾은 모든 예제는 에코를 사용하여 표시하거나 do while 루프를 사용하고 루프 내의 개별 값을 사용합니다. 나중에 스크립트에서 사용할 수 있도록 해당 변수를 자체 변수에 할당해야 합니다.

처음에는 다음과 같은 for do 루프를 시도했습니다.

for trigger_files in $param; do
    app1=(basename "{trigger_files}" .trg).dat
done

그러나 이것은 app1=ABC1099R의 첫 번째 발생만 제공합니다.

모든 항목을 별도의 변수에 저장해야 합니다. 아마도 20개의 파일 이름이 있을 것입니다. 하지만 두 개의 파일 이름으로만 작동하도록 하면 많은 파일 이름을 처리할 수 있을 것 같습니다.

답변1

당신이 사용하는 경우, bash 방식으로 수행하는 것을 고려해 보십시오.

배열은 다음에서 가져옵니다(외부 find명령 없음).

params=( *${file_name}*.trg )

그런 다음 다음과 같이 배열을 반복합니다.

for file in "${params[@]}"; do
    echo "I'm happily reading the beautiful file $file"
done

.trg확장을 제거 하고 다음으로 바꾸려면 다음을 수행하십시오 .banana.

for file in "${params[@]}"; do
    echo "My gorilla loves the file ${file%.trg}.banana"
done

이 방법은 올바른 인용과 함께 이름에 흥미로운 기호가 있는 파일에 대해 100% 안전합니다.

논평.항상 shopt -s nullglob또는 와 함께 와일드카드를 사용하십시오 shopt -s failglob.

답변2

param을 문자열 대신 배열로 선언할 수 있습니다.

declare -a param=(`find *${file_name}*.trg`)

이제 인덱스를 사용하여 마치 개별 변수에 있는 것처럼 개별 값에 액세스할 수 있습니다. 예를 들어:

echo ${param[1]}

인쇄됩니다 ABC1099C.trg(배열의 두 번째 요소. 인덱스는 0에서 시작합니다).

파일 확장자를 제거하려면 시도해 볼 수 있습니다${param[1]%.*}

배열에 대해 자세히 알아보려면 여기를 참조하세요.

관련 정보