Описание тега zte-light-tab
Из ваших комментариев к этому ответу, вы не ожидали, что ответ будет сказать и согласиться с тем, что парадигма ЗШ "лучше", и поэтому путь, по которому все снаряды должны работать. "Лучше" - это всего лишь мнение. Мнение не требует никакого обсуждения.
Может быть, то, что вы ожидаете-это деталь, почему
$а
также может быть использован для массива.Это то, что ЗШ пытается сделать, и даже если он сделал много работы в этом направлении,
он все еще не работает в некоторых случаях. Он не копирует массивы (пока).$ а=(1 2 3) в $ B=$а $ Е '<Е %>' $A ' и ' $Б; Эхо <1><2><3>< ><1 2 3>
- Но этот вопрос на самом деле очень далеки от этого. Это проблема языка.
В нашем языке мы используем название для каждой идеи. Каждая новая идея, которая кардинально отличается от предыдущих идей, должна иметь собственное имя. Естественно, в наш язык, что мы принимаем новые слова для новых идей. Подумайте об имени "Интернет", новое имя для новой идеи. Используя старые имена для новых понятий всегда ведет к путанице и недоразумениям. Вот как мы, люди строятся, и звучит разумно, когда мы думаем об этом.
- В оболочка (как и любой язык программирования), мы используем специальный синтаксис для каждой конкретной идеи.
С начала, переменной в консоли используется имя (предположим, а
), и его значение является результатом расширения (раковина процедура) символы долл
. Переменная была в состоянии содержать строку или число (автоматически преобразуются).
- Введение нового контента для переменную (массив значений) необходимо использовать новый синтаксис.
Это именно то, что на Perl сделал с помощью @а
для обозначения список, сохраняя долл
за собой скаляр
.
То есть: выше двух называются скалярными и список связи. ( В Perl ).
Именно поэтому мы имеем а=(1 2)
, чтобы присвоить массив (есть и другие способы, но этот самый распространенный). Синтаксис, который является недействительным в предыдущих снарядов.
В SH (тире в данном случае):
$ а=(12)
Ш: 2: синтаксическая ошибка: "(" неожиданный
И расширение переменная была расширена от долларов
или эквивалент ${С}
на новый синтаксис (и недопустимое в SH) `${а[@]}:
$ а=(аа ВВ СС)
$ е '%з\п' "${а[@]}"
АА
ББ
чч
В более простых снарядов (зола в данном случае):
$ а=Стрин текста
$ е '%з\п' "$а"
зольность: синтаксическая ошибка: плохая замена
Очень жаль, что такой замысловатый способ записи массива был выбран.
Если я предложу новый синтаксис, я, наверное, последовал бы за Перл вести и использовать что-то похожее на "@" для списка значений (или, может быть #А
или %с
). Что должно быть предметом обсуждения, чтобы достичь какого-то консенсуса.
- Но это не то, что было сделано (к сожалению), что было выбрано:
${а[@]}
.
Короче:
Для обратной совместимости, предполагается, что расширение простой переменной $а
приводит только одно значение, а не список значений, кроме того, запятыми.
Так как нет массивов, определенных в POSIX, это может быть эффективным, чтобы процитировать, что в POSIX определения параметров расширения сказать:
Значение, если параметр должен быть заменен.
И, ну, на самом деле, большинство снарядов печатать только скаляр С $в
Баш(4.4) : <1><====><1><2><3>
ЛКШ : <1><====><1><2><3>
МКШ : <1><====><1><2><3>
ksh93 : <1><====><1><2><3>
astsh : <1><====><1><2><3>
ЗШ/КШ : <1><====><1><2><3>
ЗШ : <1><2><3><====><1><2><3>
Так, для написания скриптов, ЗШ[а] является нечетной.
Протестированы с помощью этого скрипта:
а=(1 2 3)
е '<е %>' $в '====';
е '<е %>' "${а[@]}" ;
Эхо
[а] также Яш. совместимые оболочек csh не проверял. Скрипты с хсг-это известная проблема.