* в командной строке Linux - PullRequest
       3

* в командной строке Linux

5 голосов
/ 09 февраля 2010

Я делаю небольшой калькулятор на C и хочу передать простые арифметические формулы в мою программу. Но мне действительно не нравится, когда я передаю символ '*' в мою программу. Почему бы и нет? И как я могу обойти это без замены звездочки на что-то еще? Спасибо

Ответы [ 8 ]

9 голосов
/ 09 февраля 2010

Символ * является триггером оболочки для расширения совпадающих имен файлов.

Есть несколько способов справиться с этим:

  • Escape при наборе mycalc 5 \* 3
  • Поместите все выражение в кавычки и убедитесь, что анализатор калькулятора работает следующим образом: myprog "5 * 3"
  • Не используйте командную строку: вместо этого используйте свой собственный ввод.
7 голосов
/ 09 февраля 2010

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

6 голосов
/ 09 февраля 2010

* вызовет глобализацию и расширит все файлы в каталоге, в котором вы находитесь. Просто укажите * и запустите вашу программу как

./yourprogram '10 * 10'

или

./yourprogram 10 '*' 10

В первом случае ваша программа получит только 1 аргумент, argv [1] будет строкой "10 * 10", во втором случае вы получите 3 аргумента

3 голосов
/ 09 февраля 2010

Командная оболочка Linux (bash, tcsh, ksh и т. Д.) Раскроет «*» в список файлов, прежде чем ваша программа даже увидит его. С этим очень мало что можно сделать - пользователи могут поставить звездочку в одинарные кавычки, или убрать ее с обратной косой чертой, или использовать вместо нее «x». Ни один из них не особенно удобен для пользователя.

2 голосов
/ 09 февраля 2010

Последний метод не упоминается. Вместо того, чтобы цитировать / избегать каждого использования, вы можете отключить globbing. Таким образом, если вы хотите много использовать калькулятор, вам не нужно избегать каждого использования:

# For bash
set -o noglob

# For csh/tcsh
set noglob

# Now that noglob is set, you can safely use *
calc 3 * 3
1 голос
/ 09 февраля 2010

* оценивается как "все в текущем каталоге" в bash. Тем не менее, . работает правильно и часто используется в качестве символа для умножения в математике - в частности, скалярное умножение.

0 голосов
/ 09 февраля 2010

Попробуйте убежать, звездочка - это специальный символ в C

Изменить * на \ *

0 голосов
/ 09 февраля 2010

Приложение "calc", которое вы можете получить из deb-репозиториев apt-get install calc может оценивать 3 * 3, но не 3 * 3

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...