Tôi đã định nghĩa hàm f
trong Bash dựa trên ví dụ ở đây (trong phần "Tùy chọn có đối số"):
f () {
while getopts ":a:" opt; do
case $opt in
a)
echo "-a was triggered, Parameter: $OPTARG" >&2
;;
\?)
echo "Invalid option: -$OPTARG" >&2
return 1
;;
:)
echo "Option -$OPTARG requires an argument." >&2
return 1
;;
esac
done
}
Trong khi họ sử dụng một tập lệnh, tôi trực tiếp xác định hàm trong trình bao.
Khi tôi lần đầu tiên khởi chạy Bash và định nghĩa hàm, mọi thứ đều hoạt động: f -a 123
in -a was triggered, Parameter: 123
. Nhưng khi tôi chạy chính xác cùng một dòng lần thứ hai, không có gì được in .
Điều gì gây ra hành vi này? Nó xảy ra trong Bash 3.2 và 4.3, nhưng nó hoạt động tốt trong Zsh 5.1. Điều này là đáng ngạc nhiên bởi vì ví dụ được cho là dành cho Bash, không phải cho Zsh.