Похожие вопросы

Экранирование восклицательного знака в оболочке (отрицание для конструкции if/then)?
Linux-Avoid cat: нет такого файла или каталога, когда файл не существует
Отправка имитированных нажатий клавиш в Bash
Как автоматически выполнить скрипт при входе в Ubuntu
Windows Bash не откроется в 10-летнем обновлении
Проблемы при выполнении perl на git для Windows bash
Зачем использовать parens вместо backticks для выполнения команды "in situ"?
Автоматически генерировать имя файла с помощью bash
bash как удалить ошибку "BP precmd invoke cmd"?
Почему xmessage сообщает, что пользователь нажал "x", не отображая сообщение при запуске из cron?
Вставить кавычки в строковую переменную bash
Использование sed для включения.файлы htaccess в конфигурации Apache
Числовая сортировка файлов, включая отрицательные числа
Проблема с неправильной командой, введенной в Fish-shell, и ее выводом
Что такое SHELL-формат в envsubst?

команда cat выводит весь каталог при использовании в скрипте bash

у меня 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

есть идеи, почему он так себя ведет?

5
задан Carl B
источник

1 ответов

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

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

#!/bash/bin
file=$(</proc/net/arp)
echo "$file"
2
отвечен Gordon Davisson 2013-04-13 17:16:47
источник

Другие вопросы bash cat