Tôi đang cố gắng đặt một biến trong tập lệnh sh thành 3 ký tự cuối cùng của tên cơ sở của tệp (theo tên cơ sở tôi có nghĩa là không có đường dẫn và không có hậu tố). Tôi đã thành công trong việc này, nhưng vì tò mò, tôi tự hỏi liệu tôi có thể sử dụng một lệnh ngắn hơn, ngắn hơn không. Ban đầu tôi có một lớp lót với awk
, nhưng nó khá dài. Hiện tại tôi có tập lệnh hai dòng này (giả sử tên tệp hoàn chỉnh nằm trong $1
):
filebase=`basename "$1"`
lastpart=`echo -n ${filebase%.*} | tail -c3`
Vì vậy, ví dụ, "/path/to/somefile.txt" đầu ra "ile" trong $lastpart
.
Tôi có thể bằng cách nào đó kết hợp basename
và bit để tách hậu tố thành một lệnh duy nhất không, và có cách nào để gửi nó đến tail
(hoặc một cái gì khác tôi có thể sử dụng) mà không cần sử dụng đường ống không? Hậu tố không rõ vì vậy tôi không thể đặt nó làm tham số basename
.
Mục tiêu chính thực sự không phải là quá ngắn để có thể càng ngắn càng tốt, càng nhanh càng dễ đọc. Bối cảnh thực tế của tất cả những điều này là câu hỏi này trên Superuser , nơi tôi đang cố gắng đưa ra một câu trả lời khá đơn giản.
two
sẽ làm việc; phần mở rộng trên đó sẽ là .three
tôi đoán.
file.one.two.three
nào? Bạn có muốnile
haytwo
không?