Làm cách nào để phân tích các siêu ký tự cho đầu vào hàm trong bash?


0

Tôi đã viết một hàm trong bash lấy * làm đầu vào và do đó sẽ liệt kê tất cả các tệp trong thư mục particualar đó. nhưng không. Đây là những gì tôi đã viết:

    # a function that mass deletes files in a directory but asks before deleting
    yrm()
    {
    echo "The following files are going to be deleted:"
    ls "${1}"
    read -e -n 1 -p "Do you want to delete these files? Y/n" ANSWER
    ${ANSWER:="n"} 2> /dev/null 

    if [ $ANSWER == "Y" ]
        then
            rm $1
        else
            echo "aborted by user"

    fi

}

Tuy nhiên tôi đã thử nó với các tệp này:

l1zard@Marvin:~/.rclocal/test$ ls *
test1.txt  test2.txt  test3.txt  test5.txt  test7.txt  test8.txt  test9.txt  testm7m767.txt

và tôi nhận được đầu ra này từ chức năng của mình:

l1zard@Marvin:~/.rclocal/test$ yrm *
The following files are going to be deleted:
test1.txt
Do you want to delete these files? Y/nn
aborted by user

Làm thế nào tôi có thể sửa nó để nó liệt kê các tập tin như mong đợi?

Câu trả lời:


2

thử một cái gì đó như:

ls "$@"
read ...
if [ "${ANSWER:=n}" = Y ]
then
  rm "$@"

Nhưng bạn cũng cần kiểm tra xem các tệp đã được chỉ định chưa và chúng có tồn tại không ..


Ngoài ra tôi đã có thể rút ngắn funtoion một chút:
l1zard

0

Chức năng bây giờ trông như thế này và nó hoạt động nhờ Scrutinizer:

# a function that mass deletes files in a directory but asks before realy delting those
yrm()
{
echo "The following files are going to be deleted:"
ls "$@"
rm -rI "$@"
}

1
Lý do đây là câu trả lời là hàm không nhận được *như một tham số: shell mở rộng dấu hoa thị trước khi hàm được gọi. Xem phần mở rộng của hướng dẫn bash.
glenn jackman

Chà, điều này thật khó xử nhưng tôi đã biết về $ @ và $ * nhưng không xem xét việc sử dụng nó. Cảm ơn một lần nữa vì tất cả sự giúp đỡ của bạn.
l1zard
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.