Несовместимые реализации команд

Подстановка переменных в zsh

В bash постоянно приходится заботиться о переменных, содержащих пробелы (например A="$B"). Чтобы этого избежать, в zsh содержимое переменной подставляется как один аргумент и никак не интерпретируется. Следующие команды не сработают

A='*'; ls $A # Файл * не найден
A='ls -l'; $A # Команда "ls -l" не найдена 

Для совместимости с bash надо выполнить команды setopt GLOB_SUBST и setopt SH_WORD_SPLIT

base64

В Linux base64 file в MacOS base64 -i file. Команда base64 < file сработает и там и там.