Tôi đang cố gắng viết một tập lệnh lấy tên cơ sở của đối số, sau đó kiểm tra xem có phần mở rộng trong đối số đó hay không. Nếu có, nó sẽ in phần mở rộng.Cú pháp tên cơ sở Bash
Đây là mã của tôi:
file=basename $1
ext=${file%*}
echo ${file#"$stub"}
echo $basename $1
Tôi lặp lại trận chung kết $ basename $ 1 để kiểm tra những gì đầu ra của basename là.
Một số xét nghiệm cho thấy:
testfile.sh one.two
./testfile: line 2: one.two: command not found
one.two
testfile.sh ../tester
./testfile: line 2: ../tester: No such file or directory
../tester
Vì vậy, không phải $ basename $ 1 đang làm việc. Tôi biết đó là một lỗi cú pháp để ai đó có thể giải thích những gì tôi đang làm sai?
EDIT:
Tôi đã giải quyết vấn đề của tôi bây giờ với:
file=$(basename "$1")
stub=${file%.*}
echo ${file#"$stub"}
nào giảm tranh luận của tôi đến một basename, cảm ơn tất cả các bạn.
Cú pháp chính xác là tệp = $ (tên cơ bản $ 1). Tôi khuyên bạn nên sử dụng tệp = $ {1 ## * /}, thao tác này sẽ xóa mọi chuỗi '* /'. Nó thực sự nhanh hơn nhiều so với lệnh basename, đặc biệt khi xử lý các tập tin trong một vòng lặp. –