Bash đang hiển thị các dấu ngoặc đơn để hiển thị một lệnh là cú pháp đầu vào hợp lệ. Nó không chạy một lệnh chứa các trích dẫn đơn này trong một tham số cho sshlệnh.
ssh … '"sudo' /home/pi/shared/blink.sh 27 'off"'
nói với bạn rằng 4 thông số cuối cùng của lệnh ssh là "sudo, /home/pi/shared/blink.sh, 27và off".
Trên máy chủ từ xa, trình nền ssh kết hợp các từ của các lệnh với khoảng trắng là dấu phân cách, vì vậy lệnh từ xa mà bạn đang thực thi là
"sudo /home/pi/shared/blink.sh 27 off"
Điều này cố gắng thực thi một lệnh có tên sudo /home/pi/shared/blink.sh 27 off, tất nhiên là không tồn tại.
Xóa các trích dẫn kép từ định nghĩa của bạn về testvar.
Nó không quan trọng ở đây, nhưng nó có thể quan trọng trong trường hợp thực tế của bạn: thay vì ${testvar}viết "$testvar"(hoặc "${testvar}"nếu bạn muốn nhưng niềng răng là tùy chọn). Luôn đặt dấu ngoặc kép xung quanh các thay thế trừ khi bạn biết lý do tại sao bạn cần phải loại bỏ chúng. "$testvar"mở rộng đến giá trị của biến testvar, trong khi đó, $testvarkhi không có dấu ngoặc kép sẽ xử lý giá trị testvarnhư một danh sách các mẫu hình cầu được phân tách bằng khoảng trắng.