Вместо того, чтобы устанавливать IFS
перед chmod
и сбрасывать его сразу после, кажется, что он работает одинаково хорошо, если я устанавливаю/сбрасываю его до/послеfind
и обернуть подоболочку в массив, как это предлагается в комментарии:
IFS=$'\n'
results=($(find "$0" -type f -not -perm 644))
unset IFS
Таким образом, массив имеет правильное количество элементов, и chmod 644 "${results[@]}"
работает так, как ожидалось, до тех пор, пока нет имен файлов, содержащих символы новой строки (, хотя я не могу себе представить, зачем кому-то делать такие вещи на цель ).