매개변수 확장 문제

매개변수 확장 문제

user/admin/1/2/[ac] 하위 디렉터리에 각각 2개의 파일이 있습니다.

이 파일은 preQC_1.txt 및 preQC_2.txt입니다. 이 두 파일 모두 내 도구에 대한 입력으로 사용됩니다.

for 루프에서 "${f##*/}"를 preQC_1.txt로 사용하고 있습니다.

for f in ~/1/2/*/*_1.txt; do exptool input1= "${f##*/}" input2= "{$f%_1.txt}_2.txt"

내 프로그램은 "{$f%_1.txt}_2.txt" 파일을 표시하며 매개변수 확장을 잘못 사용하고 있다고 100% 확신합니다. input2의 경우 "preQC_2.txt"(파일 이름 + 확장자, 디렉터리 목록 없음)만 가져오도록 하려면 어떻게 해야 합니까?

편집: "${f##*/}"와 {$f%_1.txt}_2.txt"를 결합하려고 시도했지만 실제로는 "user/admin/1/2/a/preQC_1.txt_2.txt"로 확장되었습니다.

답변1

for f in ~/1/2/*/*_1.txt; do
    file_without_path="${f##*/}"
    exptool input1= "${file_without_path}" input2= "${file_without_pathf%_1.txt}_2.txt"
done

답변2

방금 문법 오류를 범하셨습니다. "{$f%_1.txt}_2.txt"작성 당시의 올바른 형식은 "${f%_1.txt}_2.txt"(잘못된 $문자를 입력했습니다)이었습니다.
:)
편집: 죄송합니다. 블록 내에서 "${f%_1.txt}_2.txt"f이 여전히 user/admin/1/2/a/preQC_1.txt기본적으로 "${f%_1.txt}_2.txt"값이 user/admin/1/2/a/preQC_2.txt원하는 것이 아니기 때문에 실수를 했습니다. 먼저 값을 업데이트하는
것이 좋습니다 .f

for f in ~/1/2/*/*_1.txt
f=${f##*/}
do exptool input1= "$f" input2= "${f%_1.txt}_2.txt"
done

이것은 Hauke ​​Laging의 답변과 거의 일치합니다.

관련 정보