When using brace expansion with certain commands, the actual behavior differed from what I expected- a member within the brace was evaluated as an argument in the other brace member's expansion.
For instance,
$ mkdir -p {folder1,folder2,folder3}/{folderA,folderB,folderC}
Works as expected -
$ tree .
.
├── folder1
│ ├── folderA
│ ├── folderB
│ └── folderC
├── folder2
│ ├── folderA
│ ├── folderB
│ └── folderC
└── folder3
├── folderA
├── folderB
└── folderC
However, if we do
$ cp -r folder1/ folder2/{folderA,folderB}
Instead of folder1 being copied to both folder2/folderA and folder2/folderB, 'folderA' is interpreted as a second source. Thus we get -
.
├── folder1
│ ├── folderA
│ ├── folderB
│ └── folderC
├── folder2
│ ├── folderA
│ ├── folderB
│ │ ├── folder1
│ │ │ ├── folderA
│ │ │ ├── folderB
│ │ │ └── folderC
│ │ └── folderA
│ └── folderC
└── folder3
├── folderA
├── folderB
└── folderC
Can anyone explain why this is the case? I would have thought the above to be evaluated as -
$ cp -r folder1/ folder2/folderA
$ cp -r folder1/ folder2/folderB