sh -c 'echo $ a'
похож на открытие новой оболочки и ввод ] echo $ a
в нем.
Поскольку в дочерней оболочке нет переменной a
(вы не экспортировали
ту, которую вы установили в родительской оболочке ), он напечатает пустую строку.
С помощью
b="two"
sh -c "echo $b"
строка «echo $ b»
расширяется текущей оболочкой, и расширенное значение передается в качестве строки аргумента в дочернюю оболочку
. Это как если бы вы открыли новую оболочку и набрали echo two
.
var = val команда
временно устанавливает и экспорт
s var = val
только для вызова команды
.
c="three" sh -c 'echo $c'
почти (подоболочки на самом деле там нет) как
( export c="three"; sh -c 'echo $c' )
Переменная c в родительской оболочке не затрагивается.
краткий ответ :да
длинный ответ :из разделов «Верхний и нижний» и «Несколько нижних слоев»:
"...The lower filesystem can be any filesystem supported by Linux and does not need to be writable. The lower filesystem even be another overlayfs...."
Из документации:
Multiple lower layers can now be given using the the colon (":") as a
separator character between the directory names. For example:
mount -t overlay overlay -olowerdir=/lower1:/lower2:/lower3 /merged
https://www.kernel.org/doc/Documentation/filesystems/overlayfs.txt