簡単な質問があります。
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 commands"が含まれている場合はどうなりますか?
別のテスト、今回は少し安全ではありません:
$ 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
何か間違ったことをするのは私ですか...?