Я понимаю, что синтаксис подоболочки (<commands...>)- это $()всего лишь подоболочка, из которой можно извлечь значения переменных? Примечание: это относится к bash 4.4 на основании различных формулировок в их документации.
Я узнаю о структурах принятия решений, и я столкнулся с этими кодами: if [ -f ./myfile ] then cat ./myfile else cat /home/user/myfile fi [ -f ./myfile ] && cat ./myfile || cat /home/user/myfile Они оба ведут себя одинаково. Есть ли какие-то преимущества в использовании одного способа из другого?
Сегодня я натолкнулся на скрипт Bash, в котором есть имена функций с двойными двоеточиями ::, например, file::write()и file::read(). Я никогда раньше не видел этот синтаксис в скрипте Bash, и когда я вызывал скрипт, он работал нормально (к моему удивлению). После просмотра справочной страницы Bash в моей системе (и в сети) …
Я хотел бы написать функцию, которую я могу вызвать из скрипта с множеством различных переменных. По некоторым причинам у меня много проблем с этим. Примеры, которые я читал, всегда используют глобальную переменную, но это не сделает мой код более читабельным, насколько я могу видеть. Пример использования по назначению: #!/bin/bash #myscript.sh …
У меня есть проект, состоящий из около 20 небольших .shфайлов. Я называю их «маленькими», потому что обычно ни один файл не содержит более 20 строк кода. Я выбрал модульный подход, потому что, таким образом, я верен философии Unix, и мне легче поддерживать проект. В начале каждого .shфайла я ставлю #!/bin/bash. …
В Bash вы можете переместить операторы перенаправления ввода в начало команды: cat <<< "hello" # equivalent to <<< "hello" cat Почему вы не можете сделать то же самое для цикла while? while read -r line; do echo "$line"; done <<< "hello" # hello <<< "hello" while read -r line; do …
TL; DR : Почему группе скобок POSIX нужны пробелы после {зарезервированного слова, а в подоболочке нет после зарезервированного слова (? Грамматика оболочки POSIX определяет группу скобок и подоболочку следующим образом brace_group : Lbrace compound_list Rbrace subshell : '(' compound_list ')' Теперь, если мы читаем это буквально, пробелы важны. Это будет …