bash
Для -Только раствора не потенциально дорогостоящим вызовы внешних программ (только важно, если вы делаете это много, что не может быть в данном случае):
pax> export x=a ; if [[ "${x%%_*}" != "${x}" ]]; then
...> export bkpdir=/backups/${x%%_*}/backup
...> else
...> export bkpdir=/backups/others/backup
...> fi
pax> echo " ${bkpdir}"
/backups/others/backup
pax> export x=a_b ; if [[ "${x%%_*}" != "${x}" ]]; then
...> export bkpdir=/backups/${x%%_*}/backup
...> else
...> export bkpdir=/backups/others/backup
...> fi
pax> echo " ${bkpdir}"
/backups/a/backup
if
оператор определяет, если есть подчеркивание, проверяя модифицированную строку против Ori ginal. Если будет знак подчеркивания, они будут разными.
${x%%_*}
дает вам строку вплоть до удаления самого длинного шаблона _*
(другими словами, он удаляет все, начиная с первого подчеркивания и заканчивая).
А (немного) проще был бы вариант:
export bkpdir=/backups/others/backup
if [[ "${x%%_*}" != "${x}" ]]; then
export bkpdir=/backups/${x%%_*}/backup
fi
спасибо за это. Я также хочу, чтобы if (_) не присутствовал, тогда по умолчанию username = others – 2010-10-13 06:35:22