Bash 스크립트에서 다음 명령을 실행하고 싶지만 작동하지 않습니다.
주문하다:
cp /tmp/first/{abc.conf,xyz.conf} /tmp/backup/
배시 스크립트:
firstDir=/tmp/first
#secondDir=/tmp/second
validDir=$firstDir
#validDir=$secondDir
backupDir=/tmp/backup
files='{abc.conf,xyz.conf}'
join=$firstDir/$files
#join=$secondDir/$files
cp $join $backupDir
exit 0
rm -rf $validDir
mkdir $validDir
cp ("$backupDir/*.conf") $validDir
실수:
cp: cannot stat '/tmp/first/{abc.conf,xyz.conf}': No such file or directory
목표는 디렉터리를 정리하고 이 2개의 파일만 다시 넣는 것입니다.
답변1
지원 확장발생하다앞으로매개변수가 확장되었으므로
files='{abc.conf,xyz.conf}'
join=$firstDir/$files
결과는 실제로 변수를 로 설정하며 /tmp/first/{abc.conf,xyz.conf}
명령에서 확장할 때 다시 처리되지 않습니다 cp
.
대신에 다음과 같이 쓸 수 있습니다.
cp "$firstDir"/{abc.conf,xyz.conf} "$backupDir"
문자 그대로 원하는 방식으로 확장됩니다.
변수에 대해 중괄호 확장을 강제로 수행할 수 있는 방법은 없지만 배열을 사용하여 파일 이름과 명령을 분리하거나 중괄호 확장을 사용하여 정의할 수도 있습니다.
files=( "$firstDir"/{abc.conf,xyz.conf} )
그 다음에 ${files[@]}
.