예를 들어, 다음과 같은 이름의 파일이 여러 개 있습니다.
ahard.txt
asoft.txt
bhard.txt
bsoft.txt
chard.txt
csoft.txt
이 파일을 반복하고 싶지만 그룹으로 처리하여 Xhard.txt
문자가 입력 파일 및 출력 파일로 사용됩니다.aXsoft.txt
X.txt
X
등을 의미 합니다 a
.b
c
실제로파일 이름에 문자 포함).
나는 시도했다:
#!/bin/bash
i=$(ls *.txt)
for x in $i
do
pipeline nser=2 input1="${x/soft.txt}" input2="${x/hard.txt}" outfile="${x/hard.txt}"
done
답변1
매개변수 확장을 사용하여 파일 이름의 첫 번째 문자를 추출할 수 있습니다.
#! /bin/bash
for soft in ?soft.txt ; do
letter=${soft:0:1}
hard=${letter}hard.txt
if [[ ! -f $hard ]] ; then
echo "$hard not found" >&2
continue
fi
echo "$soft $hard $letter.txt"
done
${soft:0:1}
$soft
(위치 0, 길이 1)의 첫 번째 문자를 반환합니다.
Xsoft의 Xhard가 누락되었다고 보고하지 않습니다.
그런데 $(ls ...)
,거의 항상 틀리다. 위의 코드 조각에 표시된 대로 확장된 glob을 반복하거나 다음을 사용하지 않고 배열을 직접 채웁니다 ls
.
files=(*.txt)