Ну, самый простой и эффективный механизм был бы вариант 0:
v="abc"
Первый механизм включает в себя четыре задания.
Второй механизм причудливый (и определенно не читается). Он (номинально) запускает пустую команду в двух суб-оболочках (две части ` `
) и объединяет выходы (пустую строку) с тремя константами. Если оболочка просто выполняет команды back-tick, не замечая, что они пустые (и это не является необоснованным, что он не заметит, это странная вещь, чтобы попробовать - я не помню, чтобы это было сделано за предыдущие 30 лет сценариев оболочки), это, безусловно, намного медленнее.
Итак, учитывая только варианты (1) и (2), используйте опцию (1), но в целом используйте опцию (0), показанную выше.
Зачем вы строите струну по частям? Что не хватает в вашем примере, который делает оригинальный код разумным, но уменьшенный код показан менее разумным.
v=""
x=$(...)
v="$v$x"
y=$(...)
v="$v$y"
z=$(...)
v="$v$z"
Это будет иметь больше смысла, особенно если использовать каждый из $x
, $y
и $z
позднее, и/или использовать промежуточные значения $v
(возможно, в командах, представленных тройных точек). Используемая запись конкатенации будет работать с любой производной Bourne-shell; альтернативная оболочка +=
будет работать с меньшим количеством снарядов, но, вероятно, немного более эффективна (с акцентом на «немного»).
Очень странно, что синтаксический анализатор не должен замечать отсутствие токенов в обратных тактах, сворачиваясь на 'no-op'. Во всяком случае, вы правы .. по частям переменные используются где-то в другом месте. Я сжал пример. – Robottinosino
30 лет сценариев .. whoa, BTW. Я поклонился! Спасибо за Ваш ответ! Вы знаете, как работает конкатенация строк внутри?Я полагаю, что можно посмотреть на источник. – Robottinosino
Я никогда не видел никого, кто хотел бы запустить ничего в суб-оболочке и захватить вывод. Возможно, это вдохновлено знанием Python? Я не смотрел, но я был бы поражен, если бы оболочка не использовала изменяемые строки для значения каждой переменной. Неизменяемость, как в Python, - это гораздо более новая идея. –