2014-12-08 3 views
0

Я пытаюсь понять это bash script. Есть несколько строк кода, которые я не могу объяснить:

первый из них является, если условие в строке 4:

if [ ! -d '/var/lib/mysql/mysql' -a "${1%_safe}" = 'mysqld' ]; then 

Может кто-то пожалуйста, объясните мне, что означает выражение -a «$ { 1% _safe} "= 'mysqld' do?

Далее в строке 38:

set -- "[email protected]" --init-file="$TEMP_FILE" 

Что делает это утверждение?

Заранее благодарим за помощь!

ответ

4

Он удаляет суффикс _safe из первого аргумента, переданного сценарию $1, и сравнивает его с mysqld. Если суффикса нет, он ничего не удаляет (но все же выполняет сравнение).

Подробнее о манипуляциях с строками в Bash см. В разделе об удалении подстроки на this page.

-a Используется для выполнения логического И между двумя условиями внутри команды test/[. Часто люди предпочитают не делать этого, особенно когда отдельные условия сложны, вместо этого предпочитают использовать if [ first condition ] && [ second condition ]. Как chepner указывает на комментарии, переключатель -ais discouraged by the POSIX standard.

set - это встроенная команда Bash, которая позволяет изменять параметры в текущей оболочке. Во многих командах оболочки -- используется для разделения опций из аргументов, поэтому он запускает set без параметров и передает "[email protected]" (аргументы, переданные скрипту) и дополнительный аргумент --init-file="$TEMP_FILE".

+1

Обратите внимание, что сам стандарт POSIX не рекомендует использовать '-a' в пользу двух отдельных команд' test'. – chepner

+1

Большое спасибо за ваше объяснение! Это помогло мне понять сценарий! Очень хороший ответ! – Alex

Смежные вопросы