Используя Рабочий стол Ubuntu, у меня есть открытый терминал, и я использую оболочку удара. Одно из расширений оболочки удара является арифметическим расширением со следующим синтаксисом:
$(( EXPRESSION ))
or
$[ EXPRESSION ]
Когда я делаю арифметику, она действительно возвращает правильное значение, но она всегда сопровождается "командой, не найденной":
$ $((1+2))
3: command not found
$ $[1+2]
3: command not found
$ $[2+2]
4: command not found
$ $((2*6))
12: command not found
Мой вопрос состоит в том, почему он отображает "команду, не найденную" и как я могу зафиксировать это?
Необходимо добавить echo
команда передо всеми Вашими командами,
$ echo $[1+2]
3
Вы не должны помещать непосредственно $[1+2]
на терминале, потому что удар вычисляет $[1+2]
и снова анализирует то же, таким образом, команда, не найденная ошибкой, происходит.
$ var="sudo apt-get update"
$ $var
Ign http://archive.canonical.com saucy InRelease
Ign http://ppa.launchpad.net saucy InRelease
Ign http://ubuntu.inode.at saucy InRelease
Ign http://extras.ubuntu.com saucy InRelease
29% [Waiting for headers] [Waiting for headers] [Waiting for headers]
В вышеупомянутом примере, sudo apt-get update
команда была присвоена переменной var
Выполнение.On $var
, первый удар разворачивает его и снова анализирует расширенный.
$ $((1+2))
3: command not found
, Что происходит, вот то, что bash
вычисляет $((1+2))
, который приводит к 3
. bash
тогда ищет команду, названную 3
для выполнения. Это не находит его. Следовательно ошибка. Как @Avinash предполагает, используйте echo
для предотвращения этого.
$ echo $((1+2))
3
Поскольку bash
пытается выполнить вывод Вашего расширения, и это не находит никакой command
с именем 3
в PATH
. Чтобы просто испытать используйте echo
или присвойте его переменной и используйте его позже.
echo $((1+2))
3
test=$((1+2))
echo $test
3