Tôi muốn xác định chữ viết tắt đơn giản của cuộc gọi đến gs
(ghostscript) qua tập lệnh trình bao. Đối số đầu tiên cung cấp tất cả các tệp cần được hợp nhất, tệp cuối cùng cung cấp tên của tệp đầu ra. Rõ ràng, những điều sau không hoạt động (chỉ để hiển thị mục tiêu):Làm thế nào để xác định một kịch bản shell với số lượng đối số biến?
#!/bin/sh
gs -dBATCH -dNOPAUSE -q -sDEVICE=pdfwrite -sOUTPUTFILE=$last $1 $2 ...
Làm cách nào để thực hiện điều này?
Một thường sẽ gọi tập lệnh này qua myscript infile1.pdf infile2.pdf ... outfile.pdf
hoặc myscript *.pdf outfile.pdf
.
Cảm ơn larsks. Có thể có tên tệp đầu ra là đối số * cuối cùng * (không phải là đầu tiên) không? –
Marius Hofert: Bạn không thể dễ dàng thay đổi yếu tố cuối cùng, vì vậy điều này phức tạp hơn một chút. Một cái gì đó như thế này: 'outputfile = $ {@: -1}; args = ("$ {@: 1: $ (($ {# @} - 1))}") '. Bạn nên chấp nhận câu trả lời của larsks này. – jordanm
Bạn * có thể *, nhưng hơi xấu xí. Idelic có một ví dụ trong câu trả lời của anh ta. Bạn kết thúc với nhiều hơn nữa cruft trong mã của bạn. – larsks