Điều này đã khiến tôi mất nhiều giờ trong giờ.Xử lý đối số dòng lệnh Perl với dấu cách từ tập lệnh bash?
Hãy xem xét kịch bản sau thử nghiệm trong perl: (hello.pl)
#!/usr/bin/perl
print "----------------------------------\n";
$numArgs = $#ARGV + 1;
print "thanks, you gave me $numArgs command-line arguments:\n";
foreach $argnum (0 .. $#ARGV) {
print "$ARGV[$argnum]\n";
}
Ok, nó chỉ đơn giản in ra các đối số dòng lệnh cho kịch bản.
Ví dụ:
$ ./hello.pl apple pie
----------------------------------
thanks, you gave me 2 command-line arguments:
apple
pie
tôi có thể cung cấp cho các kịch bản một cuộc tranh luận duy nhất với một không gian bằng cách xung quanh dòng chữ với dấu ngoặc kép:
$ ./hello.pl "apple pie"
----------------------------------
thanks, you gave me 1 command-line arguments:
apple pie
Bây giờ tôi muốn sử dụng kịch bản này trong một vỏ kịch bản. Tôi đã thiết lập tập lệnh shell như sau:
#!/bin/bash
PARAM="apple pie"
COMMAND="./hello.pl \"$PARAM\""
echo "(command is $COMMAND)"
$COMMAND
Tôi đang gọi hello.pl với cùng thông số và dấu trích dẫn. kịch bản này trả về:
$ ./test.sh
(command is ./hello.pl "apple pie")
----------------------------------
thanks, you gave me 2 command-line arguments:
"apple
pie"
Mặc dù biến $ COMMAND vang lệnh giống hệt như cách tôi chạy kịch bản perl từ dòng lệnh lần thứ hai, lần này nó không muốn nhìn thấy chiếc bánh táo như một đối số duy nhất.
Tại sao không?