สะท้อนสตริงที่มีตัวแปรอยู่ในนั้นโดยไม่ต้องขยาย / ประเมินค่ามัน [ปิด]


12

ฉันค้นหาทุกที่ สะท้อนเสียงและพิมพ์ พยายามเสนอราคาเดียวและสองครั้ง แต่ฉันมีการแยกวิเคราะห์ข้อมูลและกำหนดให้กับตัวแปรและต้องการประเมินถ้ามีตัวแปรอยู่ภายใน ฉันจะแทนที่ตัวแปรด้วยอักขระตัวแทนและค้นหาไฟล์

ตัวอย่าง:

var="file.$DATE.txt"

### Where it goes wrong-  Needs to identify that $DATE is within the $var varaible.
test=$(echo "$var"|grep '\$')
if [[ $test ]]
then
    ### I would use whatever fix is discovered here as well
    test=$(echo $test|sed 's/\$[a-zA-Z]*/\*/')
fi

### (Actually pulling from remote machine to local)
cat $test > /tmp/temporary.file

นี่คือหนึ่งในความล้มเหลวมากมายของฉัน:

PROMPT> file=blah.$DATE
PROMPT> test=$(echo "$file"|grep '\$')
PROMPT> echo $test
PROMPT>
PROMPT>

ฉันรู้ว่ามันมีบางอย่างเกี่ยวกับการขยายตัว แต่ไม่รู้ว่าจะทำอย่างไร ความช่วยเหลือใด ๆ ที่จะได้รับการชื่นชม ขอบคุณ!


คุณต้องการแก้ไขอะไร? var นั้นมีการขยาย$dateหรือไม่ สำหรับการใช้งานนั้น: var='file.$DATE.txt'. หากต้องการขยายวันที่เมื่อใช้ var ฉันแน่ใจว่าคุณต้องอธิบายสิ่งที่คุณถาม

ขออภัยเพื่อทดสอบว่ามีการกำหนดตัวแปรภายในตัวแปร "var" หรือไม่ ซ้อนกันแปลก ๆ
krmarshall87

ฉันพบวิธีแก้ไขภาวะที่กลืนไม่เข้าคายไม่ออกของฉันโดยการลบสิ่งใดก็ตามที่ดูเหมือนจะเป็นตัวแปรทันที (โดยไม่ต้องใส่ใจเป็นครั้งแรกที่ฉันต้องการ) และแลกเปลี่ยนมันด้วยสัญลักษณ์แทน: sed 's/\${*[a-zA-Z0-9_%]*}*/\*/'
krmarshall87

คำตอบ:


20

หากคุณต้องการ$dateภายในตัวแปร var:

var='file.$date.txt'

ที่จะทำให้ $ ภายในตัวแปร:

$ echo "$var" | grep '\$'
file.$date.txt

8

ใช้เครื่องหมายคำพูดเดี่ยวล้อมรอบตัวแปรเพื่อป้องกันการขยายตัวของเชลล์ ตัวอย่างจะไม่ขยายecho '$file'$file

แก้ไขหลังจากความคิดเห็นด้านล่าง:

คุณสามารถหลบหนี$เข้าสู่ระบบนั้น int กับตัวแปรvarvar="file.\$DATE.txt"


ฉันต้องการมันเพื่อขยาย แต่เพียงหนึ่งระดับ ลืมที่จะเพิ่มผลลัพธ์ที่ต้องการทีละขั้นตอน แต่ฉันต้องการให้ประเมินเนื้อหาของไฟล์ $ สำหรับเครื่องหมายดอลลาร์ ($ DATE)
krmarshall87

แก้ไขเพื่อแก้ไข
มูนีร์

ฉันได้รับข้อมูลนั้นจากแหล่งภายนอก แม้จะแทนที่ $ ด้วย \ $ ฉันคิดว่าจะต้องมีการสะท้อน แต่ขอให้ผมดูว่าเมื่อฉันแยกมันฉันสามารถบีบมันใน.
krmarshall87
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.