Tôi có một kịch bản mà người dùng cần đánh giá nhiều lần, giải pháp im làm việc là đặt các bit đánh giá vào một hàm và chỉ cần gọi hàm mỗi khi tôi cần đánh giá đầu vào. Vấn đề là khi im cố gắng cập nhật biến số $1
(tham chiếu đến tham số biến đầu tiên của hàm) Tôi nhận được thông báo lỗi "$ VARIABLE command not found".Bash gán biến gián tiếp bên trong hàm
Đây là mã:
function input_handler() {
if is_integer $1; then
selid="$1 -1"
if [[ "$1" -le "0" ]]; then
echo "Please use a simple positive number!"
else
if [[ "$1" -le "${#array[*]}" ]]; then
eval $1="${array[selid]}"
echo "Ok, moving on..."
else
echo "That number seems too large, try again?"
fi
fi
else
if [ -e $2/$1 ]; then
echo "Ok, moving on..."
else
echo "That item is not on the list, try again!"
fi
fi
}
Và lệnh này:
input_handler $doctype $docpath
Cung cấp sản lượng này:
5
./test: line 38: 5=sun: command not found
Ok, di chuyển trên ...
Bây giờ điều này gần như chính xác, nhưng những gì im afte r là doctype = sun, không 5 = mặt trời, nói cách khác tôi cần tên biến số $1
không phải là giá trị của nó. Thay đổi dòng eval $1="${array[selid]}"
thành eval doctype="${array[selid]}"
khắc phục trường hợp cụ thể này. Nhưng điều này không khắc phục được sự cố của tôi vì tôi cần chạy hàm này trên các biến khác nhau với các tên khác nhau.
Ok, nhưng tôi vẫn cần tên $ 1 không phải là giá trị, điều này có khả thi không? –
Thông số vị trí không chỉ đọc. Bạn có thể thay đổi chúng bằng 'set'. – kojiro