Score:0

ไม่สามารถเว้นวรรคในชื่อตัวแปรได้

ธง cn

ฉันพยายามจัดการกับช่องว่างในชื่อไดเร็กทอรี ตัวอย่างเช่น:

ไดรฟ์=/mnt/g; ไดรฟ์ส่งออก
mydir="$drive/ไดเร็กทอรีที่มีช่องว่างในชื่อ"
เสียงสะท้อน "$mydir"

ผลลัพธ์:

/mnt/g/ไดเรกทอรีที่มีช่องว่างในชื่อ

ซึ่งแน่นอนว่าทำให้เกิดการใช้งานเนื่องจาก bash เห็นว่านี่เป็นข้อโต้แย้งแยกต่างหาก ผลลัพธ์ที่ต้องการจะเป็นดังนี้:

"/mnt/g/ไดเรกทอรีที่มีช่องว่างในชื่อ"

เป็นอาร์กิวเมนต์เดียวสำหรับการประมวลผลในภายหลัง (ย้าย คัดลอก หรืออะไรก็ตาม) ฉันคิดว่าการอ้างคำพูดสองครั้งใช้กลอุบาย เห็นได้ชัดว่าไม่ Bash กินเครื่องหมายคำพูดคู่ไปเรื่อยๆ ใครสามารถชี้ให้ฉันเห็นขั้นตอนที่เหมาะสมสำหรับการจัดการตัวแปรที่มีช่องว่างฝังตัว

ฉันใช้ระบบย่อยของ Windows สำหรับ Linux ใน Windows 10 แต่ Ubuntu 20.04 LTS มีลักษณะการทำงานเหมือนกัน ดังนั้นฉันจึงคิดว่าสิ่งที่ใช้ได้กับสิ่งหนึ่งจะใช้ได้กับทั้งสองอย่าง (บางอย่างกับ ILS อาจจะ IDK)

uz flag
Jos
ตัวแปร `$drive` ใช้ได้ตามปกติ เป็นคำสั่งที่ตามมาที่ต้องใช้งาน เช่น `mv $drive/myfile /backup/` ควรกลายเป็น `mv "$drive/myfile" /backup/`
hr flag
bash ขยาย `"$mydir"` เป็น *single* อาร์กิวเมนต์ - ถ้ามัน "ระเบิดเมื่อใช้งาน" นั่นเป็นเพราะสิ่งที่คุณทำหลังจากนั้น (ซึ่งคุณไม่ได้แสดง)
Score:1
ธง cn

รหัสของคุณใช้ได้! คุณมีช่องว่างในตัวแปรว่าทำไมจึงเว้นวรรคจาก echo เช่นกัน ดังนั้นหากคุณต้องการใช้พารามิเตอร์ที่มีช่องว่าง คุณต้องใส่ระหว่างเครื่องหมายคำพูดเหมือนที่คุณทำ

ตัวอย่าง:

คำสั่ง "${variable1}" "${variable2}"
Score:0
ธง ru

หากผลลัพธ์ที่ต้องการคือ

"/mnt/g/ไดเรกทอรีที่มีช่องว่างในชื่อ"

รหัสที่คุณต้องการคือ

ไดรฟ์=/mnt/g; ไดรฟ์ส่งออก
mydir="\"$drive/ไดเร็กทอรีที่มีช่องว่างในชื่อ\""
เสียงสะท้อน "$mydir"
bac0n avatar
cn flag
หากคุณต้องการเก็บคำพูดไว้ตามปกติคุณใช้ bash *operator* `${mydir@Q}`
kris44dad avatar
cn flag
นี่คือส่วนที่ฉันไม่ได้รับ คำสั่ง 'cd' ที่ตามมา (ตัวอย่าง) ไปยังไดเร็กทอรีนั้นระบุว่า มีอาร์กิวเมนต์มากเกินไป Bash กำลังแยกวิเคราะห์ช่องว่าง สิ่งนี้เกิดขึ้นในตัวอย่างทั้งหมดที่แสดงไว้ที่นี่ mydir="\"$drive/directory with spaces in name\"" ให้ตัวแปรที่มีเครื่องหมายอัญประกาศคู่แต่ยังคงแยกวิเคราะห์ช่องว่างเมื่อใช้ ${mydir@Q} ให้คำพูดเดียวกับฉัน และ "${mydir}" ให้ผลลัพธ์เหมือนกับการโพสต์ต้นฉบับ ฉันไม่สามารถส่งอาร์กิวเมนต์เดียวไปยังเชลล์ได้ พวกเขาทั้งหมดผ่านการโต้แย้งหลายครั้งเมื่อใช้
ru flag
ฉันไม่เข้าใจว่าคุณต้องการทำอะไร คุณต้อง `cd` ถึง `$mydir` จากในสคริปต์ทุบตีหรือคุณต้องการสร้างตัวแปรสภาพแวดล้อมเพื่อออกคำสั่ง `cd envVariable` บนพรอมต์คำสั่งหรือไม่

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา