Bash 스크립트에서 공백이 포함된 경로에 파일을 복사하는 방법은 무엇입니까? [복사]

Bash 스크립트에서 공백이 포함된 경로에 파일을 복사하는 방법은 무엇입니까? [복사]

/tmp/template.txt에 지정된 디렉터리에 파일을 복사하는 샘플 스크립트입니다 $1.

script.sh 복사

if [ $# -eq 0 ]; then
    echo No Argument
    echo "Usage: $0 <path>"
else
    cp /tmp/template.txt $1
fi

앞으로

wolf@linux:~$ ls -lh
total 4.0K
drwxrwxr-x 2 wolf wolf 4.0K Dis  31 10:08 'another directory'
wolf@linux:~$ 

테스트 스크립트

wolf@linux:~$ copy_script.sh 
No Argument
Usage: /home/wolf/bin/copy_script.sh <path>
wolf@linux:~$ 

현재 경로를 사용하여 코드 테스트

wolf@linux:~$ copy_script.sh .

이후(유효)

wolf@linux:~$ ls -lh
total 8.0K
drwxrwxr-x 2 wolf wolf 4.0K Dis  31 10:08 'another directory'
-rw-rw-r-- 1 wolf wolf   12 Dis  31 10:26  template.txt
wolf@linux:~$ 

그런 다음 테스트용 공간이 있는 다른 디렉토리를 사용합니다.

이번에는 디렉토리가 인용되어 있어도 더 이상 작동하지 않습니다(작은따옴표/큰따옴표 모두 작동하지 않음).

wolf@linux:~$ copy_script.sh 'another directory'
cp: target 'directory' is not a directory
wolf@linux:~$ 
wolf@linux:~$ ls -lh another\ directory/
total 0
wolf@linux:~$ 

공백이 포함된 디렉토리 이름을 사용하려면 어떻게 해야 합니까?

답변1

위의 설명에서 언급했듯이 항상 매개변수 확장을 인용하세요.

cp /tmp/template.txt "$1"

여기에서 자세한 내용을 읽을 수 있습니다.

https://www.gnu.org/software/bash/manual/html_node/Shell-Parameter-Expansion.html https://wiki.bash-hackers.org/syntax/pe

완전한 코드

if [ $# -eq 0 ]; then
    echo No Argument
    echo "Usage: $0 <path>"
else
    cp /tmp/template.txt "$1"
fi

이렇게 하면 공백 문제가 해결됩니다.

shellcheck스크립트를 확인해 볼 수도 있습니다 . 이러한 문제를 식별하는 것은 매우 유용합니다.

$ shellcheck script.sh 

In script.sh line 1:
if [ $# -eq 0 ]; then
^-- SC2148: Tips depend on target shell and yours is unknown. Add a shebang.


In script.sh line 5:
    cp /tmp/template.txt $1
                         ^-- SC2086: Double quote to prevent globbing and word splitting.

Did you mean: 
    cp /tmp/template.txt "$1"

For more information:
  https://www.shellcheck.net/wiki/SC2148 -- Tips depend on target shell and y...
  https://www.shellcheck.net/wiki/SC2086 -- Double quote to prevent globbing ...
$ 

관련 정보