LINUX.ORG.RU

Ответ на: комментарий от deadNightTiger

На самом деле не всё так просто. Там надо исключать одиннадцать, а не двадцать один, ибо дальше — больше.

  • 1..∞1 — файл, но не 11;
  • [2-4]..∞[2-4] — файла, но не 12;
  • *..∞* — файлов.
r3lgar ★★★★★
()
Последнее исправление: r3lgar (всего исправлений: 1)
Ответ на: комментарий от r3lgar

*11-*19 файлов, *1 файл, *2-*4 файла, * файлов. Матчить по порядку, прекращать при сработке. Провернуть это в баше будет та еще затея.

Алсо, не парь мозги и пиши просто «файл(-ов)».

Как правильно исключить 21 из *1?

echo 21 | grep -v '21$'
echo $?
anonymous
()
Ответ на: комментарий от anonymous

Алсо, не парь мозги и пиши просто «файл(-ов)».

Я вообще обычно пишу "files: %d" и не напрягаюсь, но ТС хочет.

Провернуть это в баше будет та еще затея.

Это проблема ТСа, не моя. (%

r3lgar ★★★★★
()
Ответ на: комментарий от deadNightTiger

[^2]1

Помогло разобраться, спасибо.

На самом деле не всё так просто. Там надо исключать одиннадцать, а не двадцать один, ибо дальше — больше

Да, так и есть. Решил через переменные в условиях, всем спасибо.

mexx
() автор топика
Ответ на: комментарий от anonymous

Алсо, не парь мозги и пиши просто «файл(-ов)»

Всё у вас в этих ваших интернетах абы как )))

mexx
() автор топика
case
  11|12|17) echo сперва фильтруем исключение из правил ;;
  ...
  *1|*4) echo или говорим, что "исключение подтверждает правило" ;;
esac
anonymous
()

Или как

man ngettext
ngettext nautilus 'Extract %d file' 'Extract %d files' $NUMBER |
sed -e "s/.*%d/$NUMBER/"
DonkeyHot ★★★★★
()
Ответ на: комментарий от anonymous

Да, с case стало еще оптимальнее, спасибо.

case $COM in
1|*[!1]1)
echo "ФАЙЛ" ;;
[2-4]|*[!1][2-4])
echo "ФАЙЛА" ;;
*)
echo "ФАЙЛОВ" ;;
esac
mexx
() автор топика
Ответ на: комментарий от mexx

Интересно сравнить по скорости с:

case "0$1" in
 *[^1]1) echo файл;;
 *[^1][2-4]) echo файла;;
 *) echo файлов;;
esac
(что оптимальнее — я не знаю) :)

vodz ★★★★★
()
Ответ на: комментарий от vodz

В данном случае скорость не имеет значения. Совсем.

Однако:

*[^1]1) echo файл;;
*[^1][2-4]) echo файла;;
*) echo файлов;;

- неверно обработает 1 ФАЙЛ, 2 ФАЙЛА, 3 ФАЙЛА и 4 ФАЙЛА - напишет ФАЙЛОВ. Или о чем вопрос?

mexx
() автор топика
Ответ на: комментарий от vodz

Внимательнее посмотрите на первую строку моего решения.

Не понимаю.

Результат моей команды = число.

Смысл в:

"0$1"
какой?

На выходе число 3. Оно будет обработано НЕ верно.

Я не спорю, просто НЕ понимаю. Буду признателен за пояснение.

mexx
() автор топика
Ответ на: комментарий от legolegs

Про 'превращается' понятно. Но в обработку оно поступает именно как '03' и обрабатывается неправильно, то есть как '3 ФАЙЛОВ'.

mexx
() автор топика
Ответ на: комментарий от mexx

Запусти да проверь. Срабатывает вторая ветка case.

legolegs ★★★★★
()
Ответ на: комментарий от vodz

Внимательнее посмотрите на первую строку моего решения

Да, всё правильно, интересно, спасибо.

Запусти да проверь

С этого и начал, но ошибся в проверочной команде, бывает.

mexx
() автор топика
Ответ на: комментарий от mexx

В данном случае скорость не имеет значения.

Я люблю извращения. Вот, например, [2-4] и [234]. Второе, мне кажется, оптимальнее.

vodz ★★★★★
()
Ответ на: комментарий от vodz

(что оптимальнее — я не знаю) :)

С помощью 'date +%s%6N' вот так:

=== Вариант 'mexx' для "500" файлов ===
820
796
775
774
769
753
745
736
728
723
=== Вариант 'vodz' для "500" файлов ===
772
762
756
754
753
745
742
739
719
713

Вот, например, [2-4] и [234]. Второе, мне кажется, оптимальнее

=== Вариант 'vodz' для "3" файлов с '[234]' ===
735
720
682
677
672
658
658
641
620
602
=== Вариант 'vodz' для "3" файлов с '[2-4]' ===
779
769
756
754
746
741
735
726
714
695
mexx
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.