Đọc các đối số dòng lệnh

Fish Shell:
Đọc các đối số dòng lệnh

Làm thế nào:

Giả sử greet.fish là script của bạn. Bạn muốn nó nhận một tên và phát ra lời chào.

#!/usr/bin/env fish

# Các đối số được lưu trong $argv
# $argv[1] là đối số đầu tiên, $argv[2] là đối số thứ hai, và cứ thế.

set name $argv[1]
echo "Xin chào, $name!"

Chạy nó:

$ fish greet.fish World
Xin chào, World!

Bây giờ, với nhiều đối số:

#!/usr/bin/env fish

# Lặp qua tất cả các đối số
for arg in $argv
    echo "Xin chào, $arg!"
end

Thử nó:

$ fish greet.fish Earth Mars Venus
Xin chào, Earth!
Xin chào, Mars!
Xin chào, Venus!

Để xử lý các cờ (như -u cho chữ hoa):

#!/usr/bin/env fish

# Kiểm tra đối số "-u"
set -l uppercase_mode tắt
for arg in $argv
    if test "$arg" = "-u"
        set uppercase_mode bật
    else if set -q uppercase_mode[1]; and string match --quiet -- "$uppercase_mode" "bật"
        echo (string upper "$arg")
    else
        echo $arg
    end
end

Và kích hoạt:

$ fish greet.fish -u mercury venus
MERCURY
VENUS

Sâu hơn

Fish Shell đã nắm rõ việc đọc các đối số dòng lệnh từ lâu, giống như các shells khác. Điều đặc biệt ở Fish là sự đơn giản trong thiết kế. Không có $1, $2... $n để nhớ; nó là một mảng $argv, một lãnh thổ quen thuộc nếu bạn thích thú với những ngôn ngữ lập trình khác.

Có những lựa chọn thay thế, như bash, zsh, v.v., nhưng cú pháp script của Fish nhằm mục đích đọc và viết dễ dàng hơn. Thay vì sử dụng các lệnh shift truyền thống hoặc xử lý $@ cho tất cả các đối số, Fish có $argv thân thiện đó và những cấu trúc script đáng yêu như vòng lặp for và điều kiện if ít về những biểu tượng khó hiểu mà nhiều về những từ ngữ rõ ràng.

Khi thực hiện, điều quan trọng là cần xem xét cách script của bạn sẽ được sử dụng. Nó có cần giá trị mặc định không? Người dùng có biết phải nhập gì không? Đảm bảo rằng bạn xử lý các trường hợp mà người dùng quên không truyền đối số hoặc truyền chúng không đúng thứ tự.

Xem Thêm