Одинарные кавычки предотвращают расширение переменной оболочкой. Вместо этого пользователь использует двойные кавычки.
Для значений, которые не нужно заключать в кавычки в JSON:
aa=$( curl -d "{\"foo\": $bb}" -H... )
или,
aa=$( curl -d '{"foo":'"$bb"'}' -H... )
Если значение переменной должно быть закодировано в формате JSON, (может потребоваться для некоторых строк ), или если вы хотите, чтобы синтаксический анализатор JSON принимал решение о заключении значения в кавычки (, которое обычно требуется при отправке данные, считанные из внешнего источника, такие как пользовательский ввод):
aa=$( curl -d "$( jq -nc --arg val "$bb" '{"foo": $val}' )" -H... )
или, в два этапа,
json=$( jq -nc --arg val "$bb" '{"foo": $val}' )" )
aa=$( curl -d "$json" -H... )
Здесь используется jq
для создания документа JSON, который затем используется с параметром -d
для curl
.
Влияние ваших сценариев запуска и результирующая установка в основном повлияют на интерактивные оболочки; чтобы определить результирующее потребление ресурсов, вам не нужно идти на большие расстояния. Откройте окно терминала, чтобы ваша оболочка по умолчанию запускалась с настройками по умолчанию, затем запустите оболочку, не загружая сценарии запуска, и из этой оболочки запуститеps -F
:
$ bash --norc
$ ps -F
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
steve 3922819 3921628 0 2307 4812 7 20:49 pts/14 00:00:00 bash
steve 3922883 3922819 0 2276 4688 5 20:49 pts/14 00:00:00 bash --norc
steve 3922884 3922883 0 2892 4244 0 20:49 pts/14 00:00:00 ps -F
Глядя на колонку RSS
, видно, что моя установка bash (, которая довольно минимальна ), использует на 124 КБ больше, чем bash без излишеств -.
Моя настройка Zsh более сложная:
$ zsh -f
$ ps -F
UID PID PPID C SZ RSS PSR STIME TTY TIME CMD
steve 3921244 18008 0 3341 8296 2 20:43 pts/14 00:00:00 zsh
steve 3921628 3921244 0 2829 5856 5 20:44 pts/14 00:00:00 zsh -f
steve 3923250 3922883 0 2892 4132 7 20:51 pts/14 00:00:00 ps -F
Там разница больше, 2440КиБ.
Не-интерактивные оболочки не загружают одни и те же сценарии запуска, и они в любом случае не живут долго — если вы запустите ps -FC sh
, ps -FC bash
и т. д., вы должны увидеть, что их не так много (если вообще есть ).
То, что вы загружаете в свою среду, может иметь большее влияние; чтобы получить некоторое представление об этом, посмотрите на реальный размер/proc/.../environ
:
$ sudo wc -c /proc/*/environ | tail -n 1
758799 total
Всего это 741 КБ для почти тысячи запущенных процессов.