Đây là những gì tôi đã cố gắng:Làm thế nào để echo chuỗi với lệnh bash nhiều hơn trong Perl?
my $s = "s" x 1000;
my $r = `echo $s |more`;
Nhưng nó không hoạt động, chương trình của tôi thoát trực tiếp ...
Đây là những gì tôi đã cố gắng:Làm thế nào để echo chuỗi với lệnh bash nhiều hơn trong Perl?
my $s = "s" x 1000;
my $r = `echo $s |more`;
Nhưng nó không hoạt động, chương trình của tôi thoát trực tiếp ...
Nó không hoạt động trong ví dụ của bạn, bởi vì bạn không bao giờ in $r
. Đầu ra được ghi trong biến $r
. Bằng cách sử dụng system()
thay vào đó, bạn có thể xem đầu ra được in ra STDOUT, nhưng sau đó bạn không thể sử dụng đầu ra như bạn (có thể) mong đợi.
Chỉ cần làm:
print $r;
Cập nhật: Tôi đã thay đổi say
-print
, vì "echo" đã mang đến cho bạn một dòng mới.
Để thoát khỏi vỏ ký tự meta, như đã đề cập trong các ý kiến, bạn có thể sử dụng quotemeta.
Bạn cũng nên lưu ý rằng | more
không có tác dụng khi chụp ra từ vỏ vào một biến. Quá trình này chỉ đơn giản là: echo | more | $r
và bạn cũng có thể bỏ qua more
.
thử với lệnh system():
my $s = "s" x 1000;
my $r = system("echo $s |more");
sẽ hiển thị tất cả các bạn 's', và trong $r
bạn sẽ có kết quả (0 trong trường hợp này) của lệnh.
Làm thế nào để thoát khỏi chuỗi khi đi qua bash? – lexer
Bạn có thể sử dụng [quotemeta] (http://perldoc.perl.org/functions/quotemeta.html). Hoặc bạn có thể tự thoát khỏi nhân vật, nếu bạn biết những gì cần tìm. – TLP