bash скрипт дает другой результат при получении - PullRequest
4 голосов
/ 10 апреля 2020

Не могли бы вы помочь мне, почему этот сценарий работает при использовании источника (или даже непосредственно на консоли) и не работает над сценарием?

Я проверил, и в любом случае я использую тот же bash in / bin / и всегда 4.4.19 (1) -релиз (проверено с помощью $ BASH_VERSION)

Более того, я попытался удалить shebang, но ничего не изменилось.

#!/bin/bash

fname=c8_m81l_55.fit
bname=${fname%%+(_)+([0-9]).fit}
echo $bname

, давая эти результаты :

test:~$ ./test.sh
c8_m81l_55.fit
test:~$ . ./test.sh
c8_m81l

Спасибо, Алессио

1 Ответ

4 голосов
/ 10 апреля 2020

Bash не распознает синтаксис +(pattern), если не включены внешние блоки, и они по умолчанию отключены. Очевидно, ваша установка bash включает их в интерактивных сеансах; Вот почему ваш сценарий работает только при использовании в интерактивной оболочке.

Чтобы это исправить, либо включите внешние блоки в скрипте с помощью этой команды:

shopt -s extglob

Или используйте альтернативу, которая работает независимо от интерактивность оболочки:

bname=$(sed 's/__*[0-9][0-9]*\.fit$//' <<< $fname)
# with GNU sed it'd look like:
bname=$(sed -E 's/_+[0-9]+\.fit$//' <<< $fname)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...