Назад | Перейти на главную страницу

Экранирование специальных символов при поиске файла в bash

Я написал сценарий, который использует фрагмент оболочки bash. Фрагмент оболочки должен быть своего рода файлом конфигурации, в основном это набор переменных bash.

Проблема здесь в том, что некоторые из этих строковых переменных содержат символы, которые следует экранировать. Поскольку они не убегают, сценарий может позже сработать или иметь нежелательное поведение.

На данный момент мой скрипт проверяет синтаксис bash фрагмента оболочки (файла конфигурации) (bash -n), но если какой-либо символ должен быть экранирован, он не будет обнаружен.

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

Есть идеи, как я могу этого добиться?

В $? переменная - ваш друг. Он содержит статус возврата последней выполненной команды, включая встроенные функции bash.

$ /bin/false
$ echo $?
1
$ /bin/true
$ echo $?
0
$ echo 'FOO="bar' > atest
$ . atest
-bash: atest: line 1: unexpected EOF while looking for matching `"'
-bash: atest: line 2: syntax error: unexpected end of file
$ echo $?
1

Имейте в виду, что он возвращает только статус наиболее недавний команда. Если вам нужно запустить дополнительную команду перед выполнением теста на ошибку, вам необходимо немедленно назначить ее переменной, например:

$ /bin/false
$ MYRETURN=$?
$ /bin/true
$ echo $?
0
$ echo $MYRETURN
1