bash: расширение параметров, использование значений по умолчанию: следует ли заключать слово в кавычки, когда расширение уже заключено в кавычки? - PullRequest
1 голос
/ 06 июля 2019

В сценарии я передаю переменные ассемблеру (NASM) и хочу, чтобы ассемблер обрабатывал их как строки.Это означает, что выполняемая программа должна получать пары кавычек вокруг буквального текста.(Чтобы обеспечить обработку в виде текста, в некоторых случаях я помещал вложенные кавычки вокруг строки, например, «'...», то есть двойные кавычки вокруг одинарных кавычек вокруг содержимого.) Когда текст не должен передаваться (пустая строка), должны быть переданы две кавычки без содержания между ними.

Я использую Расширение параметров, в частности, вид Использовать значения по умолчанию, который описан следующим образом на странице руководства bash:

${parameter:-word}

Использовать значения по умолчанию.Если параметр не установлен или имеет значение null, расширение слова заменяется.В противном случае подставляется значение параметра.

Это пример того, где я использую расширение параметра Использовать значения по умолчанию: https://bitbucket.org/ecm/ldebug/commits/f9b7def927cab0568e30dd9480e9d9b31f46b99f#Lsource/mak.shT58 -D_REVISIONID_SYMSNIP="${build_revision_id_symsnip:-''}"

Тестируя это, кажется, что двойные кавычки около word разрешены, но не нужны.

$ bash --version
GNU bash, version 5.0.3(1)-release (x86_64-pc-linux-gnu)
Copyright (C) 2019 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>

This is free software; you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.
$ foo=bar
$ baz=""
$ echo "${foo:-''}"
bar
$ echo "${foo:-"''"}"
bar
$ echo "${baz:-''}"
''
$ echo "${baz:-"''"}"
''
$ echo "${baz:-' '}"
' '
$ echo "${baz:-"' '"}"
' '
$ echo X"${baz:- }"Y
X Y
$ echo X"${baz:-" "}"Y
X Y
$ 

Итак, я должен включить двойные кавычки около word или это нормально, или даже предпочтительнее,без

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