คำถามติดแท็ก quoting

โดยทั่วไปแล้วสตริงจะถูกคั่นด้วยเครื่องหมายคำพูดซึ่งทำให้เกิดปัญหาในการจัดการกับสตริงที่มีเครื่องหมายคำพูด

1
rsync แยกออกจากไดเรกทอรีที่มีช่องว่าง
ฉันกำลังพยายามแยกไดเรกทอรี "Mendeley Desktop" สำหรับ rsync แยกออกจาก = เป็นดังนี้: Downloads *.o *.iso Dropbox Documents/Mendeley\ Desktop แต่ rsync ยังคงสำรองข้อมูล Mendeley Desktop ฉันจะทำให้ rsync ข้ามไดเรกทอรีได้อย่างไร
13 rsync  quoting 

2
การต่อสตริงสตริง Bash ใช้เพื่อสร้างรายการพารามิเตอร์
รับชิ้นส่วนทุบตีนี้: PARMS='-rvu' PARMS+=" --delete --exclude='.git'" echo $PARMS rsync ${PARMS} . ${TARGET} echo แสดงสตริง PARMS ตามที่คาดไว้จะไม่มีข้อผิดพลาดปรากฏขึ้น แต่ rsync จะทำหน้าที่อย่างเงียบ ๆ ราวกับไม่มีตัวเลือกที่เพิ่มโดย + = อยู่ อย่างไรก็ตามทำงานได้ตามที่คาดไว้: PARMS='-rvu' rsync ${PARMS} --delete --exclude='.git' . ${TARGET} ฉันเดาว่าฉันทำอะไรบางอย่างกับคำพูดทุบตี (มักจะมีปัญหากับสิ่งเหล่านั้น) แต่ไม่แน่ใจว่าอะไรและทำไมตัวเลือกถูกละเว้นแม้ว่าสตริงดูเหมือนว่าจะถูกสร้างขึ้นอย่างถูกต้อง


2
จำนวนแบ็กสแลชที่จำเป็นสำหรับการหลบหนีแบ็กสแลช regex บนบรรทัดรับคำสั่ง
ฉันเพิ่งมีปัญหากับ regex บางอย่างในบรรทัดคำสั่งและพบว่าสำหรับการจับคู่แบ็กสแลชสามารถใช้อักขระต่าง ๆ ได้ หมายเลขนี้ขึ้นอยู่กับการอ้างอิงที่ใช้สำหรับ regex (ไม่มีเครื่องหมายคำพูดเดี่ยว, เครื่องหมายคำพูดคู่) ดูเซสชั่นทุบตีต่อไปนี้สำหรับสิ่งที่ฉันหมายถึง: echo "#ab\\cd" > file grep -E ab\cd file grep -E ab\\cd file grep -E ab\\\cd file grep -E ab\\\\cd file #ab\cd grep -E ab\\\\\cd file #ab\cd grep -E ab\\\\\\cd file #ab\cd grep -E ab\\\\\\\cd file #ab\cd grep -E ab\\\\\\\\cd file …

1
ต้องใช้อักขระใดบ้างในไฟล์ที่ไม่มีเครื่องหมายคำพูด?
ฉันมีเชลล์ / เทอร์มินัลที่ใช้รันคำสั่ง bash และฉันกำลังหลบหนีช่องว่าง แต่ปรากฎว่าวงเล็บยังต้องหลบหนี ต้องใช้อักขระอื่นใดในการหลีกเลี่ยงชื่อไฟล์ที่ไม่อยู่ในเครื่องหมายคำพูด?

3
รีโมต for-loop ผ่าน SSH
ฉันมีต่อไปนี้ในสคริปต์ for server in ${servers[@]}; do echo ${server} ssh user@${server} "for i in /tmp/foo* ; do echo ${i}; done" done แต่มันไม่ทำงาน สิ่งประหลาดฉันเห็นจำนวนเงินคืนของจำนวน $ I ดังนั้นถ้าฉันมีสิบไฟล์ฉันเห็นบรรทัดว่างสิบบรรทัด
12 bash  ssh  quoting 

2
หนีคำพูดในนามแฝง zsh
จากคำถามนี้เกี่ยวกับการลอกบรรทัดใหม่ออกจากข้อความฉันต้องการเปลี่ยนให้เป็นนามแฝง zsh ดังนี้: alias striplines=' awk " /^$/ {print \"\n\"; } /./ {printf( \" %s \",$0);}"' ฉันได้พยายามหลีกเลี่ยงคำพูดในสคริปต์ awk แต่ฉันได้รับข้อผิดพลาดนี้: awk: (FILENAME=bspsrobustness FNR=1) fatal: division by zero attempted (ไฟล์นี้เรียกว่าbspsrobustness) มีวิธีทำสิ่งที่ฉันต้องการหรือไม่? ฉันคิดว่าฉันสามารถเปลี่ยนให้เป็นสคริปต์ awk แทนที่จะเป็น zsh alias นั่นเป็นตัวเลือกที่ดีที่สุดของฉันหรือไม่
12 shell  zsh  quoting  alias 

2
สะท้อนสตริงที่มีตัวแปรอยู่ในนั้นโดยไม่ต้องขยาย / ประเมินค่ามัน [ปิด]
ปิด คำถามนี้ต้องการรายละเอียดหรือความคมชัด ไม่ยอมรับคำตอบในขณะนี้ ต้องการปรับปรุงคำถามนี้หรือไม่ เพิ่มรายละเอียดและชี้แจงปัญหาโดยแก้ไขโพสต์นี้ ปิดให้บริการใน4 ปีที่แล้ว ฉันค้นหาทุกที่ สะท้อนเสียงและพิมพ์ พยายามเสนอราคาเดียวและสองครั้ง แต่ฉันมีการแยกวิเคราะห์ข้อมูลและกำหนดให้กับตัวแปรและต้องการประเมินถ้ามีตัวแปรอยู่ภายใน ฉันจะแทนที่ตัวแปรด้วยอักขระตัวแทนและค้นหาไฟล์ ตัวอย่าง: 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 …
12 bash  shell  quoting 

2
เป็นอันตรายหรือไม่หากใช้เสียงสะท้อน
ฉันเคยเห็นหัวข้อที่คล้ายกันสองสามข้อ แต่พวกเขาอ้างถึงไม่ได้อ้างอิงตัวแปรซึ่งฉันรู้ว่าอาจนำไปสู่ผลลัพธ์ที่ไม่พึงประสงค์ ฉันเห็นรหัสนี้และสงสัยว่าถ้าเป็นไปได้ที่จะฉีดบางสิ่งให้ทำงานเมื่อบรรทัดของรหัสนี้ทำงาน: echo run after_bundle
11 shell  security  quoting  echo 

3
อาร์กิวเมนต์บรรทัดคำสั่ง ssh รีโมตรับการวิเคราะห์คำได้อย่างไร
ฉันเห็นคำถามและคำตอบเกี่ยวกับการต้องหลีกเลี่ยงการขัดแย้งกับคำสั่ง ssh จากระยะไกล คำถามของฉันคือ: การแยกวิเคราะห์ครั้งที่สองเสร็จสมบูรณ์เมื่อใดและเมื่อไร ถ้าฉันเรียกใช้ต่อไปนี้: $ ssh otherhost pstree -a -p ฉันเห็นสิ่งต่อไปนี้ในผลลัพธ์: |-sshd,3736 | `-sshd,1102 | `-sshd,1109 | `-pstree,1112 -a -p กระบวนการหลักสำหรับคำสั่งระยะไกล ( pstree) คือsshdไม่ปรากฏว่ามีเปลือกใด ๆ ที่จะแยกวิเคราะห์บรรทัดคำสั่งไปยังคำสั่งระยะไกลดังนั้นมันดูเหมือนว่าจะไม่จำเป็นต้องมีการอ้างถึงหรือหนีสองครั้ง ( แต่มันก็แน่นอน) ถ้าฉันกลับไปที่นั่นก่อนและรับเชลล์ล็อกอินจากนั้นเรียกใช้pstree -a -pฉันจะเห็นสิ่งต่อไปนี้ในผลลัพธ์: ├─sshd,3736 │ └─sshd,3733 │ └─sshd,3735 │ └─bash,3737 │ └─pstree,4130 -a -p เห็นได้ชัดว่ามีbashเชลล์ที่จะทำการแยกบรรทัดคำสั่งในกรณีนั้น แต่ในกรณีที่ฉันใช้คำสั่งระยะไกลโดยตรงดูเหมือนจะไม่เป็นเปลือกดังนั้นทำไมจึงจำเป็นต้องมีการอ้างอิงสองครั้ง
11 bash  shell  ssh  process  quoting 

2
วิธีใช้ตัวแปรภายในเครื่องหมายคำพูดเดี่ยว
ฉันมีแอปพลิเคชันที่ใช้เป็นคุณลักษณะอินพุตในเครื่องหมายคำพูดคู่ฝังอยู่ในเครื่องหมายคำพูดเดี่ยว ยกตัวอย่างคำสั่งที่ถูกต้องนี้: command -p 'cluster="cl1"' เพื่อให้เป็นไปโดยอัตโนมัติฉันสร้างไฟล์ bash โดยใช้$CLUSTERเป็นตัวแปร ฉันควรสั่งการอย่างไร กล่าวอีกนัยหนึ่งฉันควรใส่อะไรแทน cl1 โปรดทราบว่าหากฉันแก้ไขคำสั่งข้างต้นคำสั่งนั้นจะไม่ได้รับการยอมรับ ตัวอย่างเช่น: command -p "cluster=cl1"ไม่ยอมรับ

2
ยกมาเทียบกับการขยายตัวสตริงที่ไม่ได้ยกมา
for i in $(xrandr); do echo "$i" ; done for i in "$(xrandr)"; do echo "$i"; done for i in "$(xrandr)"; do echo $i; done ฉันเข้าใจว่าทำไม 1 แตกต่างจาก 2 แต่เหตุใด 3 จึงให้ผลลัพธ์ที่แตกต่างจาก 2 โปรดอธิบายผลลัพธ์ด้วย คำพูดทำงานอย่างไรกับการขึ้นบรรทัดใหม่

2
ปัญหาในสคริปต์ด้วยช่องว่างในชื่อไฟล์
ฉันมีสคริปต์ที่ scp เป็นไฟล์จากโฮสต์ระยะไกลกลับสู่ท้องถิ่น บางครั้งชื่อไฟล์มีช่องว่าง scp ไม่ชอบช่องว่างในชื่อไฟล์ ด้วยเหตุผลบางประการความพยายามของฉันในการจัดการช่องว่างไม่ได้ส่งผลให้เส้นทาง scp ที่ถูกต้อง รหัส: PATH=/var/root/Documents/MyFile OG-v1.2.3.pkg scp $PATH Me@10.1.10.33:/Users/Me/Desktop ผลลัพธ์ใน Cannot find directory: var/root/Documents/MyFile Cannot find directory: OG-v1.2.3.pkg การใส่ PATH ในเครื่องหมายคำพูด"$PATH"ทำให้เกิดข้อผิดพลาดเดียวกัน การสลับช่องว่างสำหรับช่องว่างที่หลบหนียังไม่ทำงานแม้ว่าเท่าที่ฉันสามารถบอกได้ก็ควรจะ: ESC_PATH=${PATH/' '/'\ '} แม้ว่าการพิมพ์พา ธ ที่หลบหนีแสดงว่าการแก้ไขทำงานได้: echo $ESC_PATH > /var/root/Documents/MyFile\ OG-v1.2.3.pkg

2
วิธีการอย่างถูกต้องหลบหนีเครื่องหมายอัศเจรีย์ในทุบตี?
วันนี้ฉันถูกจับ redhanded ในขณะที่พยายามรหัสกอล์ฟกำเนิดรหัสผ่านสำหรับ Twitter import string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9)) 90 ตัวอักษร เนื่องจากเป็นพื้นที่ว่างจำนวนมากฉันจึงตัดสินใจยกระดับและทำให้มันใช้งานได้เช่นกัน echo -e "#!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod +x pg;./pg 139 ตัวอักษร ดียกเว้นเห็นได้ชัดว่าทุบตีโช้คที่เครื่องหมายอัศเจรีย์ badp@delta:~$ echo -e "#!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod +x pg;./pg bash: !/usr/bin/python\nimport: event not found เครื่องหมายอัศเจรีย์น่ารำคาญ "มาหนีกันเถอะ" ฉันคิดว่า! ฉันมีตัวละครตัวหนึ่งเหลือเกิน echo -e "#\!/usr/bin/python\nimport string as s,random;print ''.join(random.sample(s.letters+s.digits+s.punctuation,9))">pg;chmod …

4
เพิ่มบรรทัดใหม่ในชื่อไฟล์ด้วย `mv`
มันเป็นคำถามที่จริงจัง ฉันทดสอบบางawkสคริปต์และฉันต้องการไฟล์ที่มีบรรทัดใหม่ในชื่อของพวกเขา เป็นไปได้หรือไม่ที่จะเพิ่มบรรทัดใหม่ในชื่อไฟล์ด้วยmv? ตอนนี้ฉันสามารถทำได้ด้วยtouch: touch "foo bar" ด้วยการสัมผัสฉันเพิ่มอักขระบรรทัดใหม่ต่อสำเนาและวาง แต่ฉันไม่สามารถเขียนfooReturnbarในเปลือกของฉัน ฉันจะเปลี่ยนชื่อไฟล์เพื่อให้มีการขึ้นบรรทัดใหม่ในชื่อไฟล์ได้อย่างไร แก้ไข 2015/06/28; 07:08 น หากต้องการเพิ่มบรรทัดใหม่ในzshฉันสามารถใช้Alt+Return

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