Помещение кавычек вокруг чего-то вроде "$( ls /Applications )"
заставляет оболочку обрабатывать цитируемую вещь как один аргумент, а не разбивать ее на пробелы на несколько аргументов. Таким образом, ваш цикл for
будет выполнен только один раз, а для APPS
будет задан весь список приложений, а не один раз для каждого приложения. Если вы удалите кавычки, он будет запускаться один раз для каждого приложения, если у приложений нет пробелов в их именах. К сожалению, если в именах есть пробелы, это приведет к разрыву имени в пробелах и не будет работать должным образом.
Безопасное обращение с именами файлов с пробелами в них - боль в оболочке, поэтому рекомендуется никогда не использовать пробелы в именах файлов. К сожалению, Microsoft и Apple не следуют этому совету. В этом случае вы могли бы сделать что-то вроде:
ls /Applications | while read APPS; do
result=...whatever
done
Еще одна проблема с вашим сценарием (как написано) заключается в том, что он будет сохранять результат в каждой итерации, перезаписывая предыдущий результат. Поэтому содержимое $result
в конце, которое вы печатаете, будет просто результатом последней итерации.