“команда, не найденная” при использовании арифметического расширения в оболочке удара

Используя Рабочий стол 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

Мой вопрос состоит в том, почему он отображает "команду, не найденную" и как я могу зафиксировать это?

6
задан 15 March 2014 в 18:02

3 ответа

Необходимо добавить 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, первый удар разворачивает его и снова анализирует расширенный.

4
ответ дан 17 November 2019 в 08:58
$ $((1+2))
3: command not found

, Что происходит, вот то, что bash вычисляет $((1+2)), который приводит к 3. bash тогда ищет команду, названную 3 для выполнения. Это не находит его. Следовательно ошибка. Как @Avinash предполагает, используйте echo для предотвращения этого.

$ echo  $((1+2))
3
4
ответ дан 17 November 2019 в 08:58

Поскольку bash пытается выполнить вывод Вашего расширения, и это не находит никакой command с именем 3 в PATH. Чтобы просто испытать используйте echo или присвойте его переменной и используйте его позже.

echo $((1+2))
3
test=$((1+2))
echo $test
3
3
ответ дан 17 November 2019 в 08:58

Другие вопросы по тегам:

Похожие вопросы: