Bash 스크립트의 오류를 이해하지 못합니다.
#!/bin/bash
newFile=""
for file in *
do
newFile={$file/ /_} # so as to replace spaces with underscores
mv {$file} {$newFile}
done
newFile
이것은 해당 줄의 명령이 아니라고 불평합니다.newFile={$file/ /_}
제가 뭔가 잘못하고 있는 것 같은데 계속해서 이 문제에 걸려 넘어지고 있습니다.
답변1
모든 공백에 대해 이 작업을 수행하려면 $ 위치를 이동하고 /
마지막 위치를 추가해야 합니다. 또한 파일 이름의 공백을 mv 인수 사이의 구분 기호로 처리하므로 변수를 인용해야 합니다.
#!/bin/bash
newFile=""
for file in *
do
newFile=${file// /_} # so as to replace spaces with underscores
mv "{$file}" "{$newFile}"
done
다른 답변에서 언급했듯이 이 스크립트의 절반은 중복됩니다.
newFile=""
나중에 할당에서 변수를 먼저 참조할 수 있으므로 전혀 필요하지 않습니다.
newFile=${file// /_}
할당 자체는 필요하지 않지만 매개변수 대체는 원래 값을 변경하지 않기 때문입니다.
따라서 다음과 같이 다시 작성할 수 있습니다.
#!/bin/bash
for file in *
do
mv "${file}" "${file// /_}"
done
답변2
질문에 대한 의견을 바탕으로 질문에 답변하려면 다음을 수행하세요.
$
중괄호 문자 앞에 달러 문자를 넣어야 합니다{
.""
그 외에도 () 변수를 인용하는 것이 좋습니다.- 마지막으로 모든 공백을 밑줄로 바꾸려면 "탐욕스러운" 대체를 위해 두 개의 슬래시( )를 사용해야 합니다
//
.
따라서 예제 스크립트는 다음과 같습니다.
#!/bin/bash
for myfile in *
do
mv "${myfile}" "${myfile// /_}"
done
노트:새 이름을 유지하는 데 추가 변수가 필요하지 않습니다.