В чем разница между присвоением переменной, например var=foo
, и использованием let let var=foo
? Или такие случаи, как var=${var}bar
и let var+=bar
? Каковы преимущества и недостатки каждого подхода?Bash: let statement vs assign
42
A
ответ
47
let
делает именно то, что (())
do, это для арифметических выражений. Существует almost no difference между let
и (())
.
Недопустимые примеры. var=${var}bar
собирается добавить слово bar
переменной var
(который является операцией строка), let var+=bar
не будет работать, потому что это не арифметическое выражение:
$ var='5'; let var+=bar; echo "$var"
5
На самом деле, это арифметическое выражение, если была установлена только переменная bar
, в противном случае bar
обрабатывается как ноль.
$ var='5'; bar=2; let var+=bar; echo "$var"
7
Смежные вопросы
- 1. Scheme let statement
- 2. Verilog if statement assign error
- 3. Unsafe_unretain Vs Weak VS Assign
- 4. 'read -ra' vs direct assign
- 5. Sweeper Guard-Let Statement snippet
- 6. BASH: let construct ((...))
- 7. Проблемы с дифференциацией Rspec 'let' vs 'let!'
- 8. Охрана vs if-let
- 9. let vs var performance
- 10. Lazy Var vs Let
- 11. stl vector assign vs insert
- 12. SAS let statement: обратитесь к значению ячейки?
- 13. if let statement and optionsals in swift
- 14. Let Statement/Random Function in Scheme
- 15. «let» vs «var» внутри «блока»
- 16. let or struct vs enum
- 17. var vs let in Swift
- 18. Let vs. Binding in Clojure
- 19. В rspec-rails разница между «let» VS «let!»
- 20. let vs let * в LISP - есть ли разница в эффективности?
- 21. Когда использовать let vs. if-let in Clojure
- 22. std :: string :: assign vs std :: string :: operator =
- 23. Bash If statement null
- 24. bash if else statement
- 25. grep statement в bash
- 26. bash if statement issue
- 27. Bash case statement
- 28. Bash regex if statement
- 29. Bash Scripting if statement
- 30. case statement in bash
Одно отличие состоит в том, что 'let' допускает некоторую степень косвенности:' a = b; б = 3; пусть $ a + = 1; echo $ b; '. Аргумент 'let' подвергается расширению параметров перед оценкой (что, я думаю, я не видел в упомянутой ссылке). – chepner
Собственно, царапины это. Я думал, что после 'a = b; b = 3', две команды '((a + = 1))' и '(($ a + = 1))' будут эквивалентны, но это не так. Первое, похоже, заменяет 'a' значением' b', затем увеличивает, оставляя значение 'b' нетронутым. Второй приращает 'b', оставляя' a' установленным в строке 'b'. – chepner