Запуск gcc из папки префиксов

Он не устарел, но обратные кавычки ( `...` ) являются устаревшим синтаксисом, необходимым только для самых старых из не -POSIX-совместимые оболочки-оболочки и $ (...) являются POSIX и более предпочтительны по нескольким причинам:

  • Обратные косые черты ( \ ) внутри обратных кавычек обрабатываются в не- очевидным образом:

     $ echo "` echo \\ a` "" $ (echo \\ a) "
    a \ a 
     $ echo" `echo \\\\ a`" "$ (echo \\\\ a)" 
     \ a \\ a 
     # Обратите внимание, что это верно и для * одинарных кавычек *! 
     $ foo = `echo ' \\ ''; бар = $ (эхо '\\'); echo "foo - это $ foo, bar - это $ bar" 
    foo - \, bar - \\ 
     
  • Вложенное цитирование внутри $ () намного удобнее:

     echo "x is $ (sed ... 

    вместо:

     echo "x is` sed ... 

    или напишите что-то вроде:

     IPs_inna_string =` awk "/ \` cat / etc / myname \ `/" '{print $ 1}' / etc / hosts` 
     

    , потому что $ () использует совершенно новый контекст для цитирования

    , который не переносится, так как оболочки Bourne и Korn требуют этих обратных косых черт, а Bash и dash - нет.

  • Синтаксис для вложенных подстановок команд проще:

     x = $ (grep "$ (dirname" $ ​​path ")" file) 
     

    , чем:

     x = `grep" \ `dirname \" $ path \ "\` "file` 
     

    , потому что $ () применяет совершенно новый контекст для цитирования, поэтому каждая подстановка команды защищена и может быть обработана самостоятельно, без особого беспокойства по поводу цитирования и экранирования. При использовании обратных кавычек он становится все уродливее и уродливее после двух и более уровней.

    Еще несколько примеров:

     echo `echo` ls`` # НЕПРАВИЛЬНО 
    echo `echo \` ls \ `` # ПРАВИЛЬНО 
    echo $ (echo $ (ls)) # ПРАВИЛЬНО 
     
  • Решает проблему несогласованного поведения при использовании обратных кавычек:

    • echo '\ $ x' выводит \ $ x
    • echo `echo '\ $ x' ` выводит $ x
    • echo $ (echo '\ $ x') выводит \ $ x
  • Синтаксис обратных кавычек имеет исторические ограничения на содержимое встроенной команды и не может обрабатывать некоторые допустимые сценарии, содержащие обратные кавычки, тогда как новая форма $ () может обрабатывать любой допустимый встроенный сценарий.

    Например, эти корректные встроенные скрипты не работают в левом столбце, но работают в правом IEEE :

     echo `echo $ (
    cat 

Следовательно, синтаксис для $ -префикса подстановки команды должен быть предпочтительным методом, потому что он визуально ясен с чистым синтаксисом (улучшает читаемость человеком и машиной), он является вложенным и интуитивно понятным, его внутренний синтаксический анализ отделен, а также он более согласован (со всеми другими расширениями, которые анализируются внутри двойных кавычек), где обратные кавычки являются единственным исключением, а символ « легко маскируется, когда он рядом с » , что делает его еще более трудным для чтения, особенно с мелкими или необычными шрифтами.

Су rce: Почему $ (...) предпочтительнее `...` (обратные кавычки)? в BashFAQ

См. также:

1
08.05.2018, 20:27
1 ответ

Тильда не расширяется при цитировании. Вместо этого используйте реальную переменную, например $HOME.

См. Почему тильда (~)не раскрывается внутри двойных кавычек?

Личное мнение :Свободное использование тильды в командной строке (с оговоркой, что она не раскрывается в кавычки ), а использование $HOMEявляется скриптом.

2
27.01.2020, 23:32

Теги

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