Какая оболочка наиболее близка к синтаксису C/C++?

Какая оболочка наиболее близка к синтаксису C/C++?

Я новичок в мире Linux, и я использовал Windows и писал на Visual C++ в течение последнего года или около того. Я обнаружил, что bash, похоже, является самой популярной оболочкой в ​​мире Linux. Существует ли оболочка Linux CLI, которая была бы наиболее близка к возможностям bash, но с синтаксисом типов C/C++?

решение1

Есть CSH, который отвечает всем требованиям.

ОтВикипедия

Оболочка C (csh или улучшенная версия tcsh на большинстве машин) — это оболочка Unix, созданная Биллом Джоем, когда он был аспирантом Калифорнийского университета в Беркли в конце 1970-х годов. Она была широко распространена, начиная с выпуска 2BSD системы BSD Unix, которую Джой начал распространять в 1978 году.2Другими ранними участниками идей или кода были Майкл Юбелл, Эрик Оллман, Майк О'Брайен и Джим Калп.

Страница пользователя

Или вы можете попробовать TCSH (Спасибо! @muru)

ОтВикипедия

tcsh (/ˌtiːˈsiːʃɛl/ "tee-cee-shell", /ˈtiːʃɛl/ "tee-shell", или как аббревиатура "tee cee ess aitch") — оболочка Unix, основанная на оболочке C (csh) и совместимая с ней. По сути, это оболочка C с программируемым завершением командной строки, редактированием командной строки и несколькими другими функциями. В отличие от других распространенных оболочек, функции не могут быть определены в скрипте tcsh, и пользователь должен вместо этого использовать псевдонимы (как в csh).

Обратите внимание, что эти оболочки не так широко используются, как bash, и поэтому некоторые make-файлы и скрипты оболочки могут вести себя непредсказуемо.

Страница пользователя

решение2

Bash поддерживает некоторый синтаксис в стиле C. Например:

  • Объявления/определения функций синтаксически похожи на объявления/определения функций в языке C, за исключением того, что вы не определяете ни параметры (которые извлекаются с помощью позиционных параметров $1, $2, $3, ...), ни возвращаемые типы (Bash вообще не использует типы):

    foo() {
        # ...
    }
    

    Или снова аналогично C, используя встроенное объявление/определение:

    foo() { #...; }
    

    Следует отметить, что при использовании встроенного объявления/определения первый и последний операторы должны быть разделены пробелами {и }соответственно, и что (опять же аналогично C) каждый оператор должен быть отделен от других точкой с запятой, а последний оператор должен заканчиваться точкой с запятой:

    foo() { command1; command2; command3; }
    

    Для полноты картины альтернативным способом объявления/определения функции является использование ключевого слова function, которое не требует указания ()после имени функции:

    function foo {
        #...
    }
    
  • Вы можете оценить выражение в стиле C, заключив его в двойные скобки (()): поддерживается довольно много операторов в стиле C (включая присваивание), например: =, >, >=, ==, !=, <, <=, , &&, ||, !и другие:

    $ i=0
    $ j=1
    $ ((i > j)) && echo True
    $ ((i >= j)) && echo True
    $ ((i == j)) && echo True
    $ ((i != j)) && echo True
    True
    $ ((i < j)) && echo True
    True
    $ ((i <= j)) && echo True
    True
    $ ((i && j)) && echo True
    $ ((i || j)) && echo True
    True
    $ ((\! i)) && echo True
    True
    $ ((\! j)) && echo True
    $ ((i = j))
    $ echo $i
    1
    $ echo $j
    1
    

    Этот способ оценки выражений в стиле C можно использовать совместно с операторами if, whileи :until

    if((i == 0)); then
        # ...
    done
    
    while((i == 0)); do
        # ...
    done
    
    until((i == 0)); do
        # ...
    done
    

    В частности, (())он также позволяет записывать forусловия цикла в стиле C:

    for((i = 0; i < 3; i++)); do
        # ...
    done
    
  • Оценка выражений в стиле C не поддерживает присвоение результата оценки; для этого можно использовать арифметическое расширение ( $(())), которое допускает некое подобие присвоения выражений в стиле C:

    $ i=0
    $ j=1
    $ k=$((i > j))
    $ echo $k
    0
    $ k=$((i < j))
    $ echo $k
    1
    $ x=$((1 + 2 + 3))
    $ echo $x
    6
    
  • Также поддерживаются префиксные/постфиксные операторы инкремента/декремента в стиле C:

    ++i
    i++
    --i
    i--
    

Связанный контент