たとえば、次のような名前のファイルが複数あります。
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)