У меня есть Scirpt, как это:

#!/bash/bin
file=`cat /proc/net/arp`
echo $file

И когда я запускаю скрипт, он выводит всю папку, где скрипт выглядит так:

IP address HW type Flags HW address Mask Device 192.168.1.102 0x1 0x2 a0:88:b4:e3:f6:6c naloga1.png naloga1.txt naloga1.txt~ naloga2.png naloga2.txt naloga2.txt~ naloga3.png naloga3.sh naloga3.sh~ naloga3.txt naloga3.txt~ naloga4.png naloga4.txt naloga5.png naloga5.sh naloga5.sh~ naloga5.txt naloga6.png naloga6.txt naloga6.txt~ naloga7.png naloga7.txt naloga7.txt~ naloga8.sh naloga8.sh~ porocilo.odt tekst.txt tekst.txt~ eth0 192.168.1.1 0x1 0x2 58:6d:8f:15:fd:c3 naloga1.png naloga1.txt naloga1.txt~ naloga2.png naloga2.txt naloga2.txt~ naloga3.png naloga3.sh naloga3.sh~ naloga3.txt naloga3.txt~ naloga4.png naloga4.txt naloga5.png naloga5.sh naloga5.sh~ naloga5.txt naloga6.png naloga6.txt naloga6.txt~ naloga7.png naloga7.txt naloga7.txt~ naloga8.sh naloga8.sh~ porocilo.odt tekst.txt tekst.txt~ eth0

Есть идеи, почему так?

1 ответ1

2

Файл содержит подстановочный знак (вероятно, *), и при его отображении у вас нет двойных кавычек вокруг ссылки на переменную $file . Когда оболочка раскрывает ссылку на переменную таким образом, она возвращается к значению и анализирует несколько вещей: пробелы (рассматриваются как разделители между аргументами), подстановочные знаки (которые заменяются соответствующим списком имен файлов) и т.д. Установка переменной ссылка внутри двойных кавычек позволяет избежать этого дополнительного анализа. В общем случае, рекомендуется помещать все ссылки на переменные в двойные кавычки, если вы по какой-то причине не хотите дополнительного разбора.

Кстати, я также предпочитаю $() обратным кавычкам - они, по сути, делают то же самое, но версию в скобках намного легче читать. Кроме того, в этом контексте bash позволит вам пропустить команду cat и просто использовать перенаправление < (обратите внимание, что это только функция bash).

#!/bash/bin
file=$(</proc/net/arp)
echo "$file"

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .