Как и следовало ожидать, команды внутри круглых скобок создают подоболочку. Но $()— это не то, что вы могли подумать. Он не возвращает вывод команды в виде строки, он подставляет вывод команды в оболочку. Если вам нужны доказательства, попробуйте это:$(echo "echo 123")
Вместо этого вы хотите использовать двойные кавычки, чтобы захватить его в строку вместо массива (вывода, разделенного пробелами ), который выполняется в оболочке.
output="$(echo foo)"
Обратите внимание, что это проблема не только zsh, но и bash.
После долгих поисков в Интернете я нашел -следующий пост на Reddit, который внес необходимую ясность. Я надеюсь, что это тоже поможет вам всем!
https://www.reddit.com/r/hacking/comments/9sfkab/hacking_the_art_of_exploitation_2nd_edition/