Perl 스크립트는 Linux의 bash 쉘과 HP unix의 /sbin/sh 쉘에서 서로 다른 출력을 제공합니다.

Perl 스크립트는 Linux의 bash 쉘과 HP unix의 /sbin/sh 쉘에서 서로 다른 출력을 제공합니다.

입력하다:

tmp# cat test5
1234      012345
0.000             01234
01/02/03          5467
01234           0123
05554567       234
0099
0000           000054

Bash 셸에서 출력:

[tmp]# perl -lpe 's#(^|\h)\K0[^./\h]+(?=\h|$)#"$&"#g' test5
1234      "012345"
0.000             "01234"
01/02/03          5467
"01234"           "0123"
"05554567"       234
"0099"
"0000"           "000054"

/sbin/shHP Unix의 셸 출력:

/tmp # perl -lpe 's#(^|\h)\K0[^./\h]+(?=\h|$)#"$&"#g' test5
1234      012345
0.000             01234
01/02/03          5467
01234           0123
05554567       234
0099
0000           000054

답변1

네가 원하는 것 같아편지 쓰기0으로 시작하는 모든 정수 값을 인용합니다. 이 목표를 달성하는 간단한 RE는 다음과 같습니다.

perl -lpe '1 while (s/(^|\s)(0\d*)(\s|$)/$1"$2"$3/)' test5

1234      "012345"
0.000             "01234"
01/02/03          5467
"01234"           "0123"
"05554567"       234
"0099"
"0000"           "000054"

답변2

두 시스템은 서로 다른 버전의 Perl을 실행하고 있으며 셸 차이점은 관련이 없습니다.

HP-UX의 Perl은,아케마에 따르면, Perl 5.8.8, 정방향 및 역방향 조회 이스케이프 \K\h수평 공백 이스케이프둘 다 Perl 5.10에 추가되었습니다.. 이것이것이 두 Perls가 서로 다른 결과를 나타내는 이유입니다.

관련 정보