Логическое сравнение bash дает неправильный ответ для файлов RCS, заканчивающихся на ,v

Логическое сравнение bash дает неправильный ответ для файлов RCS, заканчивающихся на ,v

Команда ls -al dog RCS/dog,vвозвращает

-rw-r--r-- 1 simon simon   0 Apr 13 19:25 dog
-r--r--r-- 1 simon simon 191 Apr 13 19:28 RCS/dog,v

указывая, что RCS/dog,vновее, чем dog, но

if [[ RCS/$dog* -nt dog ]] ; then echo not older than dog ; else echo older than dog ; fi

возвращает older than dog. Поскольку для файла, не заканчивающегося на ,v, это сравнение выполняется правильно, похоже, проблема возникает с файлами, заканчивающимися на ,v. Может ли кто-нибудь подсказать, как это исправить?

решение1

В вашем примере вы ссылаетесь напеременнаягде ваше выражение ожидаетбуквальный:

if [[ RCS/$dog* -nt dog ]] ; then echo not older than dog ; else echo older than dog ; fi

То есть,

  • Это переменная:$dog, а если не установлено, вы получите что-то вродеRCS/*(или что-то другое вместо этого, если$dogслучайно установленоcat).

  • Это буквально:dog, иRCS/dog*будет соответствоватьRCS/dog,v

Связанный контент