2014-01-26 1 views
1

Я заметил, что когда я пытаюсь эхо?, Он печатает 1.В Bash, почему бы «эхо»? распечатать 1?

Я прочитал, что это «дикая карта (одиночный символ). [Вопросительный знак] Символ« Символ »служит односимвольной« дикой картой » «для расширения имени файла в globbing, а также для представления одного символа в расширенном регулярном выражении». (как написано в документах под названием «Advanced Bash-Scripting Guide: полное руководство по сценариям оболочки, используя Bash», которые я читал в Интернете).

$ echo ? 
1 

$ echo ? ? ? 
1 1 1 

$ echo ? 1 ? 
1 1 1 

$ ls shai?n 
shai.txt 

bash --version 
GNU bash, version 4.1.2(1)-release (x86_64-redhat-linux-gnu) 
+0

Это работает для меня (я получаю знак вопроса, а не номер 1), я использую 'GNU bash, версия 4.2.25 (1) -release (x86_64-pc-linux-gnu) ' –

+0

Думал, что я ответил на аналогичную проблему раньше (пропустил поиск по названию), см. http://stackoverflow.com/questions/20631316/ bash-shell-for-loop-returns-different-values ​​/ 20631682 # 20631682 – BroSlow

+1

Попробуйте 'ls -l?'! –

ответ

5
  • ? расширяется на все один файлов символов или себя, если он не существует
  • * расширяется ко всем файлам или себя, если никто не eixsts

Так единственный способ это может произойти, если у вас есть односимвольный файл с именем 1 в вашем рабочем каталоге. например

> mkdir emptydir && cd emptydir 
> echo ? 
? 
> touch 1 && echo ? 
1 

Также обратите внимание, как комментарии указывают, вы можете распечатать его, делая echo "?" или echo \?

+1

Возможно, стоит упомянуть, как OP на самом деле выводит '?'. (Хотя, честно говоря, они не спрашивали.) –

+0

с экранированием (\\) или цитированием. –

+0

Да, у меня был файл с именем 1 в каталоге, где я тестировал это :) Я ценю ваше время, чтобы ответить на этот вопрос! – shaibn

2

Вы, вероятно, файл с именем «1» в текущем рабочем каталоге.

# echo ? 
? 

# touch 1 
# echo ? 
1 
1

С Баш-х nullglob option, вы можете подавить печати шаблона Глоб в виде строки:

$ echo ? 
? 
$ shopt -s nullglob 
$ echo ? 

$ touch A 
$ echo ? 
A