Ответ 1
Синтаксис - токен-уровень, поэтому значение знака доллара зависит от его токена. Выражение $(command)
является современным синонимом для `command`
, который означает замещение процесса; это значит, запустите command
и поместите здесь свой вывод. Так
echo "Today is $(date). A fine day."
запустит команду date
и включит ее вывод в аргумент echo
. Скобки не связаны с синтаксисом для запуска команды в подоболочке, хотя они имеют что-то общее (подстановка команд также выполняется в отдельной подоболочке).
В отличие от этого, ${variable}
является всего лишь механизмом устранения неоднозначности, поэтому вы можете сказать ${var}text
, когда вы имеете в виду, содержимое переменной var
, за которой следует text
(в отличие от $vartext
, что означает, содержимое переменной vartext
).
Цикл while
ожидает единственный аргумент, который должен оцениваться как true или false (или фактически несколько, где рассматривается последнее значение истины), благодаря тому, что Джонатан Леффлер указал на это); когда он false, цикл больше не выполняется. Цикл for
выполняет итерацию по списку элементов и по очереди привязывает их к переменной цикла; синтаксис, на который вы ссылаетесь, является одним - скорее обобщенным - способом выражения цикла по диапазону арифметических значений.
A for
Подобный цикл можно перефразировать как цикл while
. Выражение
for ((init; check; step)); do
body
done
эквивалентно
init
while check; do
body
step
done
Имеет смысл держать все элементы управления контуром в одном месте для удобочитаемости; но, как вы можете видеть, когда он выражается так, цикл for
выполняется немного больше, чем цикл while
.
Конечно, этот синтаксис Bash -специфичен; у классической оболочки Борна есть
for variable in token1 token2 ...; do
(Несколько более элегантно, вы можете избежать echo
в первом примере, если вы уверены, что строка вашего аргумента не содержит кодов формата %
:
date +'Today is %c. A fine day.'
Избегание процесса, в котором вы можете, важно изучить, хотя это не имеет большого значения в этом изолированном примере.)