Ниже представлена функция оболочки, которую можно использовать как минимум с ksh и bash. Как говорится в комментарии, он жестко запрограммирован на ожидание шаблона ввода от этого конкретного Вопроса; то есть формата «XX» (ровно два X), за которым следует что-то - не (что-то) -XX, как предполагает одна часть вопроса.
Сценарий использует расширение параметра, чтобы удалить начальные XX, чтобы сохранить их для последующей рекомбинации с увеличивающимся индексом n
. Затем он выполняет цикл от 1 до 99, обнуляет число, если это необходимо, а затем ищет несуществующее [! -f ...]
такого файла. Если он не существует, он печатает это имя файла и успешно возвращает ( возвращает 0
). Если он выходит из цикла, не найдя доступный файл, он выводит сообщение в stderr (> & 2
), выводит ничего в стандартный вывод и возвращается с неудачным кодом возврата ( возврат 1
).
# hard-coded to expect an input pattern of XX(something)
function rmktemp {
pattern=$1
suffix=${pattern#XX}
n=1
while [ $n -lt 100 ]
do
if [ $n -lt 10 ]
then
n="0${n}"
fi
tfile="${n}${suffix}"
if [ ! -f "$tfile" ]
then
printf "%s\n" "$tfile"
return 0
fi
n=$((n+1))
done
if [ $n -eq 100 ]
then
echo Could not find an unused file >&2
return 1
fi
}
Используйте это как:
LOG=$(rmktemp XX-output.log)
[ $? -eq 0 ] && echo stuff > "$LOG"