Làm cách nào để tìm số lượng đối số được truyền cho tập lệnh Bash?
Đây là những gì tôi có hiện tại:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
Có cách nào khác (tốt hơn) để làm điều này?
Làm cách nào để tìm số lượng đối số được truyền cho tập lệnh Bash?
Đây là những gì tôi có hiện tại:
#!/bin/bash
i=0
for var in "$@"
do
i=i+1
done
Có cách nào khác (tốt hơn) để làm điều này?
Câu trả lời:
Số lượng đối số là $#
Tìm kiếm nó trên trang này để tìm hiểu thêm: http://tldp.org/LDP/abs/html/iternalvariables.html#ARGLIST
argctrong các ngôn ngữ giống như C, $#sẽ là 0nếu không có đối số nào được chuyển đến tập lệnh, 1nếu có một đối số, v.v.
#!/bin/bash
echo "The number of arguments is: $#"
a=${@}
echo "The total length of all arguments is: ${#a}: "
count=0
for var in "$@"
do
echo "The length of argument '$var' is: ${#var}"
(( count++ ))
(( accum += ${#var} ))
done
echo "The counted number of arguments is: $count"
echo "The accumulated length of all arguments is: $accum"
bc, hoặc một cái gì đó khác (ksh93 và zsh cũng có thể làm toán thập phân). Mã của bạn bao gồm các ký hiệu đô la cho một số biến, nhưng không phải mã khác. Bạn nên nhất quán về việc sử dụng chúng hay không. Bên trong (())chúng không cần thiết. Họ, tuy nhiên, trong các echotuyên bố.
để thêm tài liệu tham khảo ban đầu:
Bạn có thể nhận được số lượng đối số từ tham số đặc biệt $#. Giá trị 0 có nghĩa là "không có đối số". $#là chỉ đọc.
Khi được sử dụng cùng với shiftđể xử lý đối số, tham số đặc biệt $#sẽ giảm dần mỗi khi Bash Buildin shiftđược thực thi.
xem Hướng dẫn tham khảo Bash trong phần 3.4.2 Các thông số đặc biệt :
"Shell xử lý một số tham số đặc biệt. Các tham số này chỉ có thể được tham chiếu "
và trong phần này cho từ khóa $ # "Mở rộng số lượng tham số vị trí theo số thập phân."
Dưới đây là một cách dễ dàng -
mèo đếm được.sh
echo "$@" |awk '{for(i=0;i<=NF;i++); print i-1 }'
Đầu ra:
#./countvariable.sh 1 2 3 4 5 6
6
#./countvariable.sh 1 2 3 4 5 6 apple orange
8
echo "$@" | awk '{print NF}'
i+1trong biếninếu có bất kỳ đối số nào.