한 가지 간단한 질문이 있습니다.
bash (4.4.11을 사용하고 있음)가 일반으로 구분 / 끝나는 줄 / 텍스트를 표시하지 않는 것이 정상 \r
입니까?
이 동작을보고 약간 놀랐습니다.
$ a=$(printf "hello\ragain\rgeorge\r\n")
$ echo "$a"
george
그러나 "안녕 다시"텍스트는 여전히 "숨겨져"있습니다.
$ echo "$a" |od -w32 -t x1c
0000000 68 65 6c 6c 6f 0d 61 67 61 69 6e 0d 67 65 6f 72 67 65 0d 0a
h e l l o \r a g a i n \r g e o r g e \r \n
그리고 우리가 bash를 가지고 노는 즉시 괜찮습니다. 그러나 이것이 잠재적 인 보안 위험입니까? 변수 "a"의 내용이 외부에서 나오고 단순히 hello 대신 "bad command"를 포함하면 어떻게됩니까?
이번에는 조금 안전하지 않은 또 다른 테스트 :
$ a=$(printf "ls;\rGeorge\n")
$ echo "$a"
George
$ eval "$a"
0 awkprof.out event-tester.log helloworld.c oneshot.sh rightclick-tester.py tmp uinput-simple.py
<directory listing appears with an error message at the end for command George>
숨겨진 rm
대신 숨겨진 것을 상상해보십시오 ls
.
echo -e를 사용할 때와 동일한 동작 :
$ a=$(echo -e "ls;\rGeorge\r\n"); echo "$a"
George
내가 잘못한 것이 나인가?