Обычно вы не хотите анализировать выводls
.
Здесь сzsh
(вы уже используете синтаксис zsh
, а не bash
, так как вы не заключаете свои переменные в кавычки и используете подстановку команд без отключения подстановки ), вы могли бы сделать:
dir1_file_names=(dir1/*(N:t))
dir2_file_names=(dir2/*(N:t))
for f1 f2 (${dir1_file_names:^dir2_file_names})
printf '%s\n' "f1: $f1, f2: $f2"
zsh
может зацикливаться с несколькими переменными. ${a:^b}
— это оператор сжатия массива . Если в одном из массивов меньше элементов, чем в другом, это будет так, как если бы они были усечены до длины наименьшего.
См. также операторы пересечения массивов и вычитания, если речь идет о сравнении имен файлов в двух каталогах.:
file_names_in_both_dir1_and_dir2=(${dir1_file_names:*dir2_file_names})
file_names_only_in_dir1=(${dir1_file_name:|dir2_file_names})
file_names_only_in_dir2=(${dir2_file_name:|dir1_file_names})