Bạn cũng có thể sử dụng printflệnh, thay vì echo:
printf '%s\n' *
printflà vượt trội so với echotrong tình huống này ở chỗ echonào không tôn trọng các "dấu gạch ngang đôi" ( --) để biểu thị sự kết thúc của danh sách đối số (trên một số hệ thống, bao gồm Ubuntu 14.04 mà là những gì tôi thử nghiệm nó trên):
llama@llama:~$ mkdir -p Misc/unix210948
llama@llama:~$ cd !$
cd Misc/unix210948
llama@llama:~/Misc/unix210948$ touch -- -n
llama@llama:~/Misc/unix210948$ ls
-n
llama@llama:~/Misc/unix210948$ echo *
llama@llama:~/Misc/unix210948$ echo -- *
-- -n
llama@llama:~/Misc/unix210948$ printf '%s\n' *
-n
Trong trường hợp này, bạn không thể đạt được kết quả mong muốn với echo(vì một tệp được gọi là -nđược hiểu là một tùy chọn và dấu gạch ngang kép không hoạt động, vì vậy bạn phải sử dụng printf).
Lưu ý rằng bạn phải luôn sử dụng chuỗi định dạng như trên khi xử lý dữ liệu không xác định printf, vì nếu không, bạn có thể nhận được kết quả không mong muốn (cảm ơn @ G-Man đã chỉ ra điều này trong các nhận xét!):
llama@llama:~/Misc/unix210948$ rm ./-n
llama@llama:~/Misc/unix210948$ touch '\n'
llama@llama:~/Misc/unix210948$ ls
\n
llama@llama:~/Misc/unix210948$ printf -- *
llama@llama:~/Misc/unix210948$ printf '%s\n' *
\n
Một tập tin được gọi \nđược hiểu là một dòng mới bởi printf. Để tránh điều này, chúng tôi sử dụng một chuỗi định dạng cho printf( %s) và truyền cho nó tên của các tệp (được mở rộng thông qua toàn cầu hóa, như trước đây).
printfGiải pháp chuỗi định dạng + này có thể xử lý nhiều tên tệp (và cũng xử lý các tệp "ẩn", nghĩa là, các tệp bắt đầu bằng a ., giống như ls):
llama@llama:~/Misc/unix210948$ rm ./*
zsh: sure you want to delete all the files in /home/llama/Misc/unix210948/. [yn]? y
llama@llama:~/Misc/unix210948$ touch -- '-n' '\n' 'name with spaces' '.hidden'
llama@llama:~/Misc/unix210948$ ls
-n \n name with spaces
llama@llama:~/Misc/unix210948$ printf '%s\n' *
-n
\n
name with spaces
Nếu printfhỗ trợ của bạn %q, bạn cũng có thể sử dụng ( printf '%q\n' *). Điều này sẽ thoát khỏi không gian, dòng mới, vv nếu có bất kỳ ký tự lạ nào trong tên tệp của bạn. (Cảm ơn @muru trong trò chuyện vì đã chỉ ra điều này !)
libc*sohỏng hoặc của bạnld-linux*so