Есть несколько проблем с вашим подходом:
(A B)
можно использовать только для назначения массива (например, C=(A B)
), но не для создания одного на лету.
Однако для for не требуется массив, поэтому for C in A B
будет работать просто отлично.
Правильный синтаксис for
петель for ... in ...; do ..., done
.
Эта команда должна работать просто отлично:
for C in release debug; do for T in iphoneos iphonesimulator; do cp build/$C-$T/*.a sdk/$C-$T; done; done
Обратите внимание, что для этого уже нужны соответствующие папки в sdk .
Однако, как уже показал @Robertof, есть способы архивировать это без каких-либо циклов.
Если вы хотите скопировать все файлы из каталогов (т. *.a
соответствует всем), вы можете использовать его команду или это небольшое упрощение:
cp -R build/{release,debug}-iphone{os,simulator} sdk
Как это устроено:
Оболочка выполнит раскрытие скобки, поэтому команда, которая будет фактически выполнена, будет следующей:
cp -r build/release-iphoneos build/release-iphonesimulator build/debug-iphoneos build/debug-iphonesimulator sdk
-r
делает cp рекурсивным, то есть он копирует целые каталоги, а не только файлы.
Если вы хотите скопировать только файлы ` .a (т. Е. Есть другие), вам лучше использовать эти команды:
cd build
cp --parents {release,debug}-iphone{os,simulator}/*.a ../sdk
Как это устроено:
Опять же, расширение скобок выполняется, как и раньше.
Параметр --parents
заставляет cp использовать полное имя исходного файла для получателя, то есть файлы из release-iphoneos
будут скопированы в ../sdk/release-iphoneos
.
Наконец, несколько советов:
При экспериментировании с командами cp всегда используйте ключ -i
. Это делает cp интерактивным, что означает, что он будет запрашивать перед перезаписью что-либо.