Хорошо, таким образом, у меня есть эта проблема. Я описываю сценарий, который будет выполнен в cygwin в Windows. Я попробовал набор основных сценариев в качестве примера в случае, если это была моя проблема сценариев.
Таким образом, я попробовал это:
#!/bin/bash
echo -e "Enter your name and press [ENTER]: \c"
read var_name
echo "Your name is: $var_name"
Затем я выполню его, и я ввожу имя для var_name.
Я получаю это:
$ ./project1.sh
Enter your name and press [ENTER]: Jake
': not a valid identifierad: `var_name
Your name is:
Таким образом, поскольку далеко насколько я понимаю у меня есть проблема с чтением. Я пытаюсь работать над проектом для своего класса, но я, может казаться, не выясняю, почему он не считает его. Я следовал, книга без триумфа затем обратилась к этим примерам в сети, которые, кажется, не работают на меня также. Делает у любого есть любая идея, если это - моя установка или если я пропускаю что-то, спасибо.
Вы должны выполнить od -xcb
для этого скрипта. Я предполагаю, что в нем почти наверняка будет неправильный символ окончания строки.
Причина, по которой я предлагаю это, заключается в том, что строка:
': not a valid identifierad: `var_name
подозрительно похожа на две строки:
.........................ad: `var_name
': not a valid identifier
, объединенные вместе (где символы .
указывают на то, что было перезаписано).
Так было бы, если бы ваша переменная в этой строке была v a r _ n a m e возврат каретки вместо более обычного var_name
.
Тот факт, что это Cygwin, также указывает на этот вывод, поскольку часто возникают проблемы при редактировании сценариев с помощью редактора Windows , который использует CR / LF, тогда как Cygwin ожидает только LF.
Я подозреваю, что вы обнаружите, что выполнение od -xcb
в вашем реальном скрипте показывает, что у вас есть эти окончания строки Windows в одной или нескольких строках вашего скрипта.
Фактически, я только что протестировал это под Ubuntu, поместив CTRL-M
только в конец строки read
, и вывод был (слегка изменен, чтобы показать ] CTRL-M
):
pax@pax-desktop:~$ od -xcb qq.sh ; ./qq.sh
0000000 2123 622f 6e69 622f 7361 0a68 6365 6f68
# ! / b i n / b a s h \n e c h o
043 041 057 142 151 156 057 142 141 163 150 012 145 143 150 157
0000020 2d20 2065 4522 746e 7265 7920 756f 2072
- e " E n t e r y o u r
040 055 145 040 042 105 156 164 145 162 040 171 157 165 162 040
0000040 616e 656d 6120 646e 7020 6572 7373 5b20
n a m e a n d p r e s s [
156 141 155 145 040 141 156 144 040 160 162 145 163 163 040 133
0000060 4e45 4554 5d52 203a 635c 2022 720a 6165
E N T E R ] : \ c " \n r e a
105 116 124 105 122 135 072 040 134 143 042 040 012 162 145 141
0000100 2064 6176 5f72 616e 656d 0a0d 6365 6f68
d v a r _ n a m e \r \n e c h o
^^
144 040 166 141 162 137 156 141 155 145 015 012 145 143 150 157
0000120 2220 6f59 7275 6e20 6d61 2065 7369 203a
" Y o u r n a m e i s :
040 042 131 157 165 162 040 156 141 155 145 040 151 163 072 040
0000140 7624 7261 6e5f 6d61 2265 0a0a
$ v a r _ n a m e " \n \n
044 166 141 162 137 156 141 155 145 042 012 012
0000154
Enter your name and press [ENTER]: Pax
': not a valid identifierar_name
Your name is:
Другими словами, очень похоже на то, что вы видите.
В стороне (теперь, когда у меня есть доступ к моей среде Cygwin), вы видите результат:
abcdefghij.sh: line 99 read: `var_name
`: not a valid identifier
где вторая строка перезаписывает первую, давая:
`: not a valid identifierad: `var_name
Другими словами, странное слово идентификатор
на самом деле состоит из идентификатора
и последнего объявления:
из , читаемого:
.Причина, по которой он похож только на мой пример выше (в отличие от точного), заключается в том, что ваше имя файла и номер строки будут отличаться от моего небольшого тестового скрипта.
вы можете просто использовать read
для подсказки пользователю. Нет необходимости в echo
read -r -p "Enter your name and press: " var_name