例如,我有多个带有名称的文件
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)