Генерация имени файла не происходит в кавычках. Следовательно, вы передаете литеральную строку *.f90
в функцию, и эта строка также используется там буквально. Если вы точно знаете, что в вашем каталоге ровно один файл f90, не используйте кавычки и пишите
diffm . *.f90 ../../dir2
Все становится ужасно, если в имени файла есть пробел (который, кстати, один причина, по которой я предпочитаю Zsh вместо bash - вам не нужно заботиться об этом в Zsh). Чтобы разобраться с этим делом, вы можете сделать
myfile=*.f90
diffm . "$myfile" ../../dir2
Но рано или поздно вас укусит тот факт, что по какой-то причине у вас есть более одного файла f90, и ваша стратегия сломается , Следовательно, лучшим решением было бы использовать al oop, который также работает для случая границы, когда имеется только один файл:
iterating=0
for myfile in *.f90
do
if ((iterating == 0))
then
((iterating+=1))
diffm . "$myfile" ../../dir2
elif [[ ! -f $myfile ]]
then
echo "No files matching $myfile in this directory"
else
echo "ERROR: More than one f90-file. Don't know which one to diff" 1>&2
fi
done
Часть elif
просто заботится о случае, который вы не делаете. У меня нет файлов f90. В этом случае тело l oop выполняется один раз, а myfile
содержит шаблон подстановки.