Я сделаю это кратким и пренебрегу некоторыми конкретными деталями реализации. Вот начальный код, и он имеет три случая: 1. Нет аргумента, считывается из пользовательского ввода 2. Два аргумента 3. Ошибка:
path="$(pwd)"
TIME_OUT="2s"
matchfile=""
reference=""
# CASE 1 : if no parameter, read from user input
if [ $# -eq 0 ]; then
# User input(detail neglected) gives the value of array[i], matchfile is test__xx
# reference is ex_xx, same as the following situation
matchfile="test_${array[i]}"
reference="ex_${ref}"
#if there are two parameters, matchfile is test__xx
# reference is ex_xx
# CASE 2:
elif [ $# -eq 2 ] && [ -n "$1" ] && [ -d "$2" ]; then
matchfile="test_$1"
reference="ex_$1"
#exit in other cases
#CASE 3:
else
exit 1
fi
Вот часть, где я перечисляю файлы в каталоге и нахожу файл с таким же шаблоном:
set -x
echo "$path"
ls "$path"/testcases
for Y in "$path"/testcases/* ; do
echo " Original Ref: $Y"
if [ "$Y" == "${path}/testcases/$reference" ]; then
ref_file="$Y"
break
fi
done
exit 1
Теперь в случае 2 код file_listing выдаст правильное сообщение, например:
+ echo DIR
+ ls DIR/testcases
++ pwd
+ for Y in '"$path"/testcases/*'
+ ls DIR/testcases/2.txt
+ echo 'the directory is DIR/testcases/2.txt'
++ pwd
+ echo ' Original Ref: DIR/testcases/2.txt'
+ '[' DIR/testcases/2.txt == DIR/testcases/ex_SOMEFILE2 ']'
+ for Y in '"$path"/testcases/*'
+ ls DIR/testcases/ex_SOMEFILE2
+ echo 'the directory is DIR/testcases/ex_SOMEFILE2'
++ pwd
+ find DIR/testcases -type f -exec chmod a+rwx '{}' ';'
+ echo ' Original Ref: DIR/testcases/ex_SOMEFILE2'
+ '[' DIR/testcases/ex_SOMEFILE2 == DIR/testcases/ex_SOMEFILE2 ']'
+ ref_file=DIR/testcases/ex_SOMEFILE2
+ break
+ exit 1
В случае 1 сообщение file_listing становится одной строкой:
+ echo DIR
+ ls DIR/testcases
++ pwd
+ for Y in '"$path"/testcases/*'
+ ls 'DIR/testcases/*'
ls: cannot access DIR/testcases/*: No such file or directory
+ echo 'the directory is DIR/testcases/*'
++ pwd
+ echo ' Original Ref: DIR/testcases/*'
+ '[' 'DIR/testcases/*' == DIR/testcases/ex_SOMEFILE2 ']'
+ exit 1
Это означает, что подстановочный знак не работает, но я действительно не знаю, почему.