Как скрыть часть неиспользуемой переменной при запуске скрипта - PullRequest
3 голосов
/ 02 августа 2020

Как я могу скрыть переменную от использования, если она не определена командой bash в этой ситуации:

EXCLUDE_PORTS="--exclude-ports $2"

if [ "${EXCLUDE_PORTS:-}" == "" ]; then
    EXCLUDE_PORTS=''
fi

Мне также нужно скрыть --exclude-ports, когда $ 2 не указано . На самом деле, когда я не указал $ 2 при запуске скрипта, скрипт принимает только первую пустую часть «--exclude-ports», и это разрушает мой скрипт.

Ответы [ 4 ]

5 голосов
/ 02 августа 2020

Всегда использовать / предпочитать массив при динамическом построении аргументов:

if [ -n "$2" ]
then EXCLUDE_PORTS=( '--exclude-ports' "$2" )
else EXCLUDE_PORTS=()
fi

echo command "${EXCLUDE_PORTS[@]}" --other-option
3 голосов
/ 02 августа 2020

Использовать встроенные условные выражения; Проверьте с помощью расширения параметров

. Вы можете преобразовать его в одну строку, используя встроенные условные выражения и логическую && условную конструкцию . Также неплохо использовать правильное цитирование. Например:

[[ -n "$2" ]] && EXCLUDE_PORTS="--exclude-ports '$2'"

Здесь вы можете проверить logi c с помощью расширения параметра :- вот так:

# make sure your environment is clean for testing
unset EXCLUDE_PORTS

# set exactly two positional arguments
set -- one two

# set variable if $2 zero length when expanded
[[ -n "$2" ]] && EXCLUDE_PORTS="--exclude-ports '$2'"

# print variable if set, or message to aid debugging
echo "${EXCLUDE_PORTS:-variable is empty}"
# --exclude-ports 'two'

Если у вас только один позиционный параметр:

unset EXCLUDE_PORTS
set -- one
[[ -n "$2" ]] && EXCLUDE_PORTS="--exclude-ports '$2'"
echo "${EXCLUDE_PORTS:-variable is empty}"
variable is empty
3 голосов
/ 02 августа 2020

Для этого есть сокращение:

EXCLUDE_PORTS=${2:+--exclude-ports $2}

Сокращение - ${var:+ <alternate value>}, которое пусто, если var не установлено или пусто, а иначе заменяется альтернативным значением.

Теперь, если вы объедините это с ответом Леи :

EXCLUDE_PORTS=( ${2:+--exclude-ports "$2"} )
1 голос
/ 02 августа 2020

Это работает для вас?

EXCLUDE_PORTS="--exclude-ports $2"
if [[ $2 == "" ]] || [[ "${EXCLUDE_PORTS:-}" == "" ]]; then
    EXCLUDE_PORTS=''
fi

Все, что вам нужно, это OR ||

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...