ระบบปฏิบัติการ : Ubuntu 16.04.3
เชลล์ : ทุบตี 4.3.48
ฉันรู้ว่าเป็นไปได้ที่จะเปลี่ยนแปลงเนื้อหาของตัวแปรชั่วคราวในvar=value command
ซึ่งอาจIFS= read -r var
เป็นกรณีที่น่าสังเกตมากที่สุดของเรื่องนี้
และด้วยวิกิของเกร็กฉันก็เข้าใจเช่นกัน:
# Why this
foo() { echo "$var"; }
var=value foo
# And this does work
var=value; echo "$var"
# But this doesn't
var=value echo "$var"
สิ่งนี้ทำให้ฉันเข้าใจได้:
$ foo() { echo "${var[0]}"; }
$ var=(bar baz) foo
(bar baz)
เท่าที่ผมรู้ (และต่อไปนี้ตรรกะของตัวอย่างก่อนหน้านี้) ก็ควรพิมพ์ไม่bar
(bar baz)
สิ่งนี้เกิดขึ้นกับฉันหรือเปล่า นี่เป็นพฤติกรรมที่ตั้งใจและฉันขาดอะไรไปหรือเปล่า? หรือนี่เป็นข้อบกพร่องหรือไม่?
export var=(foo bar); echo "${var[0]}"
มันพิมพ์ไม่ได้foo
(foo bar)
export
มันแสดง:declare -ax var=([0]="foo" [1]="bar")
export i_am_array=(foo bar); /usr/bin/env | grep i_am_array
ไม่มีผลลัพธ์ที่นี่
foo() { declare -p var; } ; var=(bar baz) foo
ให้การdeclare -x var="(bar baz)"
ยืนยันว่ามันถูกใช้เป็นสตริงไม่ใช่อาร์เรย์