파일에서 공백을 밑줄로 바꾸십시오: 내 bash 스크립트에 오류가 있습니다.

파일에서 공백을 밑줄로 바꾸십시오: 내 bash 스크립트에 오류가 있습니다.

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

질문에 대한 의견을 바탕으로 질문에 답변하려면 다음을 수행하세요.

  1. $중괄호 문자 앞에 달러 문자를 넣어야 합니다 {.
  2. ""그 외에도 () 변수를 인용하는 것이 좋습니다.
  3. 마지막으로 모든 공백을 밑줄로 바꾸려면 "탐욕스러운" 대체를 위해 두 개의 슬래시( )를 사용해야 합니다 //.

따라서 예제 스크립트는 다음과 같습니다.

#!/bin/bash

for myfile in *
do
    mv "${myfile}" "${myfile// /_}"
done

노트:새 이름을 유지하는 데 추가 변수가 필요하지 않습니다.

관련 정보