Linux bash 스크립트에서 틱 명령 실행을 방지하는 방법

Linux bash 스크립트에서 틱 명령 실행을 방지하는 방법

$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쉘 변수에 소문자 또는 대소문자 혼합을 사용하는 것이 가장 좋습니다. 시스템은 변수에 대문자를 사용하므로 실수로 대문자 중 하나를 덮어쓰는 것을 원하지 않습니다.

관련 정보