$ {! prefix @} Когда используется '@' и расширение заключено в двойные кавычки - PullRequest
1 голос
/ 17 июня 2020

Я не понимаю того, что в руководстве bash говорится о расширении параметров префикса.

В руководстве bash написано следующее:

${!prefix*}
${!prefix@}

Расширяется до имен переменных, имена которых начинаются с префикса, разделенных первым символом специальной переменной IFS. Когда используется '@' и расширение появляется в двойных кавычках, каждое имя переменной расширяется до отдельного слова.

Когда я выполняю это в bash:

aaa=1
aab=2
aac=3
echo "${!aa@}"

В результате получается следующее: aaa aab aac

Это работает, как ожидалось. Однако дело в том, что я получаю тот же результат, когда использую echo "${!aa*}", и я не понимаю разницы.

1 Ответ

2 голосов
/ 17 июня 2020

echo объединяет все свои аргументы через пробел и печатает результат с новой строкой в ​​конце. Используя вместо этого printf, вы можете ясно увидеть разницу.

$ aaa=1
$ aab=2
$ aac=3
$ printf '<%s>\n' "${!aa@}"
<aaa>
<aab>
<aac>
$ printf '<%s>\n' "${!aa*}"
<aaa aab aac>

Кроме того, в то время как слова соединяются первым символом IFS в раскрытии *; IFS вообще не соблюдается, когда используется @.

$ IFS=,
$ echo "${!aa@}"
aaa aab aac
$ echo "${!aa*}"
aaa,aab,aac
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...