Для решения 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
оператор определяет, есть ли подчеркивание, проверяя измененную строку по отношению к оригиналу.Если есть подчеркивание, они будут другими.
${x%%_*}
дает вам строку вплоть до удаления самого длинного шаблона _*
(другими словами, он удаляет все, начиная от первого подчеркивания доконец).
(немного) более простой вариант будет:
export bkpdir=/backups/others/backup
if [[ "${x%%_*}" != "${x}" ]]; then
export bkpdir=/backups/${x%%_*}/backup
fi