안녕하세요, 저는 다음과 같이 mv 명령과 중괄호 확장을 사용하여 일련의 디렉터리를 이동하려고 합니다.
#!/bin/bash
...
group_name=$1
group=$((total/set))
group=$((group-1))
mkdir "$group_name""1"
mv dat{10.."$group"} "$group_name""1"
...
이 기능은 다음과 같이 사용됩니다.
grouping_dirs 총 group_name
예: grouping_dirs 30 2 dir_name
내 디렉터리 목록은 다음과 같습니다.
dat10 dat11 dat12 dat13 dat14 dat15 등등.
하지만 저는 단지 dat{10..14} 디렉토리를 dir_name1로 옮기고 싶습니다.
하지만 다음과 같은 오류가 발생합니다.
mv: 'dat{10..14}'을 계산할 수 없습니다: 해당 파일이나 디렉터리가 없습니다
디렉토리가 존재하더라도. 나는 변경을 시도했기 때문에 이것을 알고 있습니다.
mv dat{10.."$group"} ... to mv dat{10..14} ...
효과가 있었습니다. 저는 중괄호 안에 ""를 올바르게 사용하지 않고 있다고 생각하지만 저는 bash 스크립팅에 상당히 익숙하지 않습니다. 따라서 귀하의 통찰력에 감사드립니다! 감사해요!
답변1
문제는 Bash에서 중괄호 확장이 변수 확장보다 먼저 발생한다는 것입니다. 이는 중괄호 확장이 변수를 고려하지 않음을 의미합니다. 당신은 그것을 사용할 수 있습니다 :
eval "echo dat{10..$group}"
다음과 같이 출력됩니다:
dat10 dat11 dat12 dat13 dat14
귀하의 경우에는 다음을 사용하십시오.
mv $(eval "echo dat{10..$group}") "$group_name""1"