我有一个简单的问题。
bash(我使用的是4.4.11)显示的行/文本以纯文本分隔/结尾是否正常\r
?
我对这种行为感到有些惊讶:
$ a=$(printf "hello\ragain\rgeorge\r\n")
$ echo "$a"
george
但是“ hello again”文本仍然存在,以某种方式“隐藏”:
$ 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”的内容来自外部并且包含“错误命令”而不是仅仅打招呼怎么办?
另一个测试,这次有点不安全:
$ 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
是我做错事了吗...?