/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 ...
$