Jeśli uruchomię prosty skrypt perla, taki jak ten (w linuxie, z bash)
$to_run = q(echo "t");
$res = `$to_run`;
print $res
Spodziewałbym się tego t
zostanie wydrukowany - czyli znak ukośnika odwrotnego i znak „t”. Rzeczywiście, jeśli biegnę w bashu
echo "t"
Widzę t
. Jednak skrypt perla wypisuje tabulator.
Dlaczego tabulator jest rozwinięty $res
? Jakie wszystkie postacie są tak rozbudowane? A co najważniejsze, w jaki sposób mogę go powstrzymać przed rozszerzaniem?
Odpowiedzi:
5 dla odpowiedzi № 1Backticks są oceniane za pomocą /bin/sh
, niezależnie od powłoki, której możesz użyć, i to jest Wersja zgodna z POSIX XSI echo
wprowadzony przez sh
to się konwertuje t
do karty. Wypróbuj sam, biegając echo "t"
wewnątrz sh
.
Aby uniknąć tego zachowania, spróbuj użyć printf "%sn"
zamiast echo
w backticks.