![Linux bash 스크립트에서 틱 명령 실행을 방지하는 방법](https://linux55.com/image/151665/Linux%20bash%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%EC%97%90%EC%84%9C%20%ED%8B%B1%20%EB%AA%85%EB%A0%B9%20%EC%8B%A4%ED%96%89%EC%9D%84%20%EB%B0%A9%EC%A7%80%ED%95%98%EB%8A%94%20%EB%B0%A9%EB%B2%95.png)
$COMMAND
두 번째 탭으로 구분된 필드를 변수에 저장 하고 싶지만 $i
이렇게 하면 명령이 cd ~
실행됩니다. TEST_CASE_001
사이에 탭 문자가 있습니다.cd ~
i='TEST_CASE_001 cd ~'
COMMAND=$(echo $i | cut -f2)
실행 및 저장을 방지하는 방법은 무엇입니까 $COMMAND
?
답변1
참고: 이 답변은 질문의 첫 번째 버전에 적용됩니다.
먼저 i
탭을 사용하여 정의해 보겠습니다.
$ i=$'ls -l\tcd ~'
이제 큰따옴표 없이 명령을 실행해 보겠습니다.
$ echo $i | cut -f2
ls -l cd ~
$ echo "$i" | cut -f2
cd ~
예상대로 작동 하려면 큰따옴표를 cut
추가해야 합니다 $i
. 큰따옴표가 없으면 쉘은 다음을 수행합니다.분사이로 인해 탭이 공백으로 대체됩니다. 이렇게 하면 cut
명령이 예상대로 작동하지 않습니다.
명령을 할당해도 다음은 변경되지 않습니다.
$ Command=$(echo $i | cut -f2); declare -p Command
declare -- Command="ls -l cd ~"
$ Command=$(echo "$i" | cut -f2); declare -p Command
declare -- Command="cd ~"
일반 메시지
여기서는 더 큰 컨텍스트를 제공하지 않지만 일반적으로 명령을 변수에 넣는 것은 좋지 않은 생각입니다. 바라보다"명령을 변수에 넣으려고 하는데 복잡한 경우가 항상 실패합니다!".
또한 변수의 경우 COMMAND
쉘 변수에 소문자 또는 대소문자 혼합을 사용하는 것이 가장 좋습니다. 시스템은 변수에 대문자를 사용하므로 실수로 대문자 중 하나를 덮어쓰는 것을 원하지 않습니다.