Khi bạn lập trình bash shell script thì bạn đôi khi sẽ gặp 1 trường hợp mang tên ‘ambiguous redirect‘. Thế nó là gì ? các trường hợp dẫn đến lỗi trên và giải pháp xử lý ?
Ví dụ lỗi :
# echo hello > ${TEST} bash: ${TEST}: ambiguous redirect # ./demo.sh line 46: ${OUPUT_RESULTS}: ambiguous redirect
1. Trường hợp 1 – sai tên biến = giá trị biến rỗng
– Trong trường hợp này đơn giản là bạn cần kiểm tra lại xem tên biến bạn đang sử dụng cho output chuyển hướng có đúng hay chưa ? Nếu trong trường hợp chưa đúng thì fix cho đúng nhé.
– Cũng trong trường hợp này, bạn cần kiểm tra xem biến của bạn đã được set giá trị nào hay chưa ? Nếu giả sử trong flow code bạn có code để set giá trị biến $TEST , thì lỡ như trong trường hợp ngoài ý muốn biến của bạn không nhận được giá trị nào thì nó trở thành biến rỗng -> dẫn đến phát sinh lỗi.
Ví dụ :
# TEST="cuongqc.txt" # echo "Thanh cong" >> $TEST # echo "Thanh cong2" >> $TSET bash: $TSET: ambiguous redirect
Giải pháp:
– Việc sai tên biến cũng đồng nghĩa biến có giá trị bằng rỗng.
– Kiểm tra lại tên biến !
– Kiểm tra giá biến có giá trị không rỗng hay không !
2. Trường hợp 2 – biến có cụm từ chứa khoảng trắng
– Trường hợp kế tiếp này, chúng ta sẽ đến với tình huống là biến $TEST không rỗng, có giá trị và đúng tên biến nhưng. …. : giá trị có chứa cụm từ có khoảng trống.
Ví dụ 2:
# TEST="cuong quach.txt" # echo "Thanh cong" >> $TEST bash: $TEST: ambiguous redirect
– Yo bạn thấy không, vì có khoảng trắng trong cụm từ giá trị của biến mà dẫn đến phát sinh lỗi này.
Giải pháp:
– Hãy luôn sử dụng dấu double-quote (” “) để rào chắn lại biến của bạn khi được gọi.
– Vì nếu bạn không để double-quote thì bash sẽ tự động chia giá trị biến có khoảng trắng $TEST ra để xử lý thay vì xử lý thành 1 cụm từ, việc double-quote sẽ chỉ cho bash việc phải xử lý giá trị biến đó thành 1 cụm duy nhất.
# TEST="cuong quach.txt" # echo "Thanh cong" >> "$TEST"
Ok như vậy 2 tình huống trên là 2 trường hợp dẫn đến phát sinh lỗi “ambiguous redirect” các bạn nhé. Cám ơn các bạn đã theo dõi bài viết.