Резюме :Вероятно, где-то в вашем коде есть echo $p
. Вам нужно удвоить -цитату $p
.
Нет, *
не считается командой ls
. Однако он рассматривается как шаблон подстановки имени файла из-за того, что он используется без кавычек где-то (, а не в коде, показанном в вопросе )
.
Необходимо соблюдать осторожность при назначении и использовании значения p
и использовать соответствующие кавычки для защиты строки.
Шаблоны подстановки имен файлов здесь не раскрываются -строки:
$ cat <<< *
*
Таким образом, нет ничего плохого в использовании $p
без кавычек в вызове sed
. Однако почти всегда лучше указывать расширения переменных в кавычках. См. также использование $fname
без кавычек в вашем тесте. Это должно быть двойное цитирование наверняка.
Вы говорите, что скрипт выводит текст
>= (short)BigBlock file1 file2 file3 DISK_SIZE + Size)
Нет ничего, что могло бы спровоцировать вывод этой строки в сценарии, указанном в вопросе. Вероятно, это связано с тем, что вы делаете
echo $p
где-то еще в сценарии.
Опять же, используйте двойные кавычки вокруг$p
:
echo "$p"
Таким образом, вы не даете оболочке выполнить подстановку имени файла на его значение (расширение*
).
Как правило, используйте echo
только для статических строк и используйте printf
для переменных данных:
printf '$p is "%s"\n' "$p"
В связи с последним пунктом:Почему printf лучше, чем echo?
Вам следует рассмотреть возможность использования общего доступа к папкам через virtio(https://wiki.qemu.org/Documentation/9psetup). Хотя это требует добавления параметров времени выполнения для включения поддержки qemu и 9P в ядре вашего хоста (, в ядрах Debian это включено как модули ).