Аргумент '*' приводит к ошибке "значение слишком велико для базы" - PullRequest
0 голосов
/ 12 ноября 2018

Я делал этот действительно простой арифметический скрипт, но получил странную ошибку при попытке передать оператор *. Синтаксис: [команда] [номер1] [номер2] [арифметический оператор] Вот код:

result=$(($1$3$2))
echo "Calculation result is: $result "

Передача оператора '*', например:

bash my_script.sh 1 2 *

... возвращает следующую ошибку:

строка 7: 3Access: слишком большое значение для базы (токен ошибки "3Access")

Я собрал вместе исправление для него, заменив * на \\\* через оператор проверки. Хотя я хотел бы понять , почему эта ошибка возникает.

Единственные потоки, которые я обнаружил, относятся к ошибке относительно восьмеричных значений, которые BASH принимает за восьмеричные. Но мне непонятно, почему * вообще рассматривается как числовое значение.

1 Ответ

0 голосов
/ 12 ноября 2018

* имеет особое значение в языке оболочки. Он используется для расширения имени файла и распространяется на все не скрытые файлы и папки в текущем каталоге и передает их как отдельные аргументы в сценарий.

Просто попробуйте этот скрипт, чтобы увидеть:

#!/bin/bash
# star.sh
echo "$1"
echo "$2"
echo "$3"
# and so on ...

Теперь запустите:

bash star.sh *

Он напечатает первые 3 файла в вашем текущем каталоге.


Чтобы избежать расширения имени файла, вам нужно заключить в кавычки *. Как это:

bash your_script.sh 1 2 '*'

или сбежать

bash your_script.sh 1 2 \*

См. Руководство по Bash: расширение имени файла .

...