У вас есть две смонтированные файловые системы с одинаковыми характеристиками: одинаковое имя устройства, одинаковое использование диска. Скорее всего, это одно и то же устройство. Это может произойти, например, если вы смонтируете одну и ту же сетевую файловую систему в разных местах. Учитывая, что это локальная файловая система, как указано в комментарии sourcejedi , очень вероятно, что это будет bind mount , созданная командой типа mount --bind / origin /var/www/username/data/www/test.site.biz/photo
.
Если ваша система достаточно свежая, вы можете использовать findmnt
, чтобы подтвердить, что это монтирование привязки . Но в любом случае большинство типов файловых систем не могут быть смонтированы одновременно в разных местах, поэтому наличие одного и того же устройства является достаточным доказательством того, что это монтирование с привязкой.
Привязка монтирования обеспечивает просмотр дерева каталогов в другом месте. С точки зрения доступа к файлам при монтировании привязки это похоже на наличие символической ссылки в дереве, то есть /var/www/username/data/www/test.site.biz/photo/somefile
- это тот же файл, что и / origin / somefile
, как если бы /var/www/username/data/www/test.site.biz/photo
был символической ссылкой на / происхождение
. Но /var/www/username/data/www/test.site.biz/photo
- это не символическая ссылка, это каталог.
Поскольку /var/www/username/data/www/test.site.biz/photo
является каталогом, в него спускается рекурсивный обход. Итак, rm -rf
удалил файлы в папке / original
, потому что / original
и /var/www/username/data/www/test.site .biz / photo
- это один и тот же каталог, который случайно отображается в разных местах.
Вы можете вставлять переменные только в строки с двойными кавычками.
Простой и безопасный способ сделать это - выйти из строки с одинарными кавычками следующим образом:
xml='<?xml version="1.0" encoding="iso-8859-1"?><tag1>'"$str1"'</tag1><tag2>'"$str2"'</tag2>'
Обратите внимание, что после выхода из строки с одинарными кавычками я заключил переменные в двойные кавычки. Это сделано для того, чтобы обеспечить безопасность специальных символов внутри переменных.
Поскольку вы просили другой способ, вот неполноценная альтернатива с использованием printf
:
xml=$(printf '<?xml version="1.0" encoding="iso-8859-1"?><tag1>%s</tag1><tag2>%s</tag2>' "$str1" "$str2")
Она неполноценна, поскольку для достижения того же эффекта используется вложенная оболочка, что является ненужным дополнительным процессом.
Как написал в комментарии @steeldriver, в современных версиях bash можно написать так, чтобы избежать вложенной оболочки:
printf -v xml ' ... ' "$str1" "$str2"
Поскольку printf
является встроенным модулем оболочки, эта альтернатива, вероятно, частично совпадает с моим первым предложением вверху.
Расширение переменной не происходит в строках с одинарными кавычками.
Вы можете использовать двойные кавычки для своей строки и избежать двойных кавычек внутри с помощью \
. Примерно так:
xml="<?xml version=\"1.0\" encoding=\"iso-8859-1\"?><tag1>$str1</tag1><tag2>$str2</tag2>"
Результат вывода:
<?xml version="1.0" encoding="iso-8859-1"?><tag1>hello</tag1><tag2>world</tag2>