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

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

2
ทำไมฉันต้องหลบหนีอักขระ regex ใน sed เพื่อตีความว่าเป็นอักขระ regex
ดูเหมือน cat sed_data.txt | sed 's/\b[0-9]\{3\}\b/NUMBER/g' ว่าฉันจะต้องหลบหนีตัวละครเพื่อสร้างการแสดงออกปกติ ในกรณีนี้ฉันต้องหลบหนีเครื่องมือจัดฟันเพื่อที่จะตีความได้หลายครั้ง ทำไม? ฉันคาดหวังว่าทุกอย่างจะเป็นตัวละคร regex เว้นแต่จะหลบหนี นั่นคือสิ่งที่ตรงกันข้าม

3
การเปลี่ยนชื่อไฟล์ที่มีเครื่องหมายคำพูด 'ในชื่อ
ฉันมีปัญหาเล็กน้อย ไคลเอนต์หนึ่งมอบหมายให้ฉันย้ายเว็บไซต์จากเซิร์ฟเวอร์เก่าจริง ๆ ไม่ทราบว่าพวกเขาไปถึงที่นั่นได้อย่างไร แต่มีไฟล์'อยู่ในชื่อของพวกเขา มีวิธีการเปลี่ยนชื่อไฟล์หรือไม่? mvดูเหมือนจะไม่ทำเคล็ดลับ ls แสดงให้เห็นว่าเป็น 90843_O\\'ConnorPaul_GeneralManager.jpg เมื่อฉันลอง mv 90843_O\\'ConnorPaul_GeneralManager.jpg 90843_O_ConnorPaul_GeneralManager.jpg มันไม่ทำอะไรเลยกับ>ในบรรทัดใหม่ราวกับว่ากำลังรอการป้อนข้อมูลเพิ่มเติม ถ้าฉันลอง mv 90843_O\'ConnorPaul_GeneralManager.jpg 90843_O_ConnorPaul_GeneralManager.jpg ฉันได้รับข้อผิดพลาด mv: ไม่สามารถสถิติ '90843_O \' ConnorPaul_GeneralManager.jpg ': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว นอกจากนี้ยังจะมีวิธีง่าย ๆ ที่จะเปลี่ยน\'ไป_ในไฟล์ทั้งหมดในโฟลเดอร์บาง?
11 rename  quoting 

2
วิธีสร้างนามแฝงด้วยคำสั่งประกอบด้วย 'และ "
มีบางโพสต์ที่ผ่านมามีคนถามวิธีแสดงหน่วยความจำเป็นเปอร์เซ็นต์ มีคนตอบกลับด้วย: free | awk '/^Mem/ { printf("free: %.2f %\n", $4/$2 * 100.0) }' ฉันสงสัยว่าฉันสามารถเปลี่ยนคำสั่งนี้เป็นชื่อแทนใน ~ / .bashrc หรือไม่ แต่ไวยากรณ์ของนามแฝงคือ: alias aliasname='command' ฉันจะทำสิ่งนี้ได้อย่างไร ที่มีทั้งคำสั่งและ' "ฉันลองใช้วิธีการต่าง ๆ แต่มันไม่ทำงาน เป็นไปได้ไหม ฉันพลาดอะไรไปรึเปล่า?
10 bash  quoting  alias 

4
เหตุใดการตัดจึงล้มเหลวด้วยการทุบตีและไม่ zsh
ฉันสร้างไฟล์ที่มีฟิลด์คั่นด้วยแท็บ echo foo$'\t'bar$'\t'baz$'\n'foo$'\t'bar$'\t'baz > input ฉันมีสคริปต์ชื่อต่อไปนี้ zsh.sh #!/usr/bin/env zsh while read line; do <<<$line cut -f 2 done < "$1" ฉันทดสอบมัน $ ./zsh.sh input bar bar มันใช้งานได้ดี อย่างไรก็ตามเมื่อฉันเปลี่ยนบรรทัดแรกเพื่อเรียกใช้bashแทนจะล้มเหลว $ ./bash.sh input foo bar baz foo bar baz ทำไมสิ่งนี้ถึงล้มเหลวbashและทำงานกับzsh? การแก้ไขปัญหาเพิ่มเติม การใช้เส้นทางตรงใน shebang แทนที่จะenvสร้างพฤติกรรมแบบเดียวกัน ไปป์กับechoแทนที่จะใช้ที่นี่สตริง<<<$lineยังสร้างลักษณะการทำงานเดียวกัน echo $line | cut -f 2กล่าวคือ ใช้awkแทนการcut …

1
การแทนที่ Bash พร้อมตัวแปรที่กำหนดจากรูปแบบ glob
ตัวอย่างด้านล่างอธิบายถึงปัญหา เหตุใดจึงFILENAMEพิมพ์อย่างถูกต้องเมื่อสะท้อนและรับรู้เป็นรูปแบบเมื่อใช้การทดแทน? #!/bin/bash FILEPATH_WITH_GLOB="/home/user/file_*" FILENAME=$(basename "$FILEPATH_WITH_GLOB") echo $FILENAME #file_1234 echo ${FILENAME:1:5} #ile_* <---why is this not ile_1

6
การลบไฟล์ด้วยช่องว่างในชื่อของพวกเขา
ฉันพยายามลบไฟล์ทั้งหมดที่มีช่องว่างในชื่อของพวกเขา ฉันใช้คำสั่งดังต่อไปนี้ แต่มันทำให้ฉันมีข้อผิดพลาด คำสั่ง: ls | egrep '. ' | xargs rm ที่นี่ถ้าฉันใช้ls | egrep '. 'คำสั่งเพียงอย่างเดียวมันให้ชื่อไฟล์ทั้งหมดพร้อมช่องว่างในชื่อไฟล์ แต่เมื่อฉันพยายามที่จะส่งออกไปยัง rm ช่องว่างทั้งหมด (นำหน้าหรือต่อท้าย) จะถูกลบ ดังนั้นคำสั่งของฉันไม่ได้รับการดำเนินการอย่างถูกต้อง ตัวชี้ใด ๆ เกี่ยวกับวิธีลบไฟล์ที่มี atleast หนึ่งช่องว่างในชื่อของพวกเขา?
10 shell  quoting  rm  xargs 

4
นิพจน์ทั่วไปที่ใช้ \\ vs using \
ทำไม grep e\\.g\\. <<< "this is an e.g. wow" และ grep e\.g\. <<< "this is an e.g. wow" ทำสิ่งเดียวกัน ถ้าฉันเพิ่มเครื่องหมายสแลชที่สามมันก็มีผลลัพธ์เหมือนกัน แต่เมื่อฉันเพิ่มเครื่องหมายสแลชที่สี่มันไม่ทำงานอีกต่อไป สิ่งนี้เกี่ยวข้องกับคำถามจากการสอบแบบเก่าสำหรับชั้นเรียน มันถามว่าคนที่มีแบ็กสแลชสองตัวอันหนึ่งจะทำงานเพื่อเอาท์พุทบรรทัดด้วย "เช่น" ฉันคิดว่ามันไม่ทำงาน แต่ฉันพยายามทำให้แน่ใจและมันก็ทำเช่นนั้น คำอธิบายคืออะไร

2
คำสั่ง Bash ในสตริงกำลังทำงานเมื่อฉันสร้างสตริงไม่ใช่เมื่อฉันใช้ในภายหลัง
ฉันค่อนข้างใหม่เปลือกสคริปต์ แต่ได้เกือบเสร็จสมบูรณ์สคริปต์ซึ่งทำให้การใช้เป็นโปรแกรม lftp ส่วนของสคริปต์ที่ฉันมีปัญหาคือเมื่อฉันสร้างคำสั่งยาว ๆ (คั่นด้วย;) for var in something do ... commands_to_run+="echo Result is `tail -n 1 $somefile`;" done สิ่งที่ฉันสังเกตเห็นคือtailโปรแกรมที่ห่อใน backticks กำลังถูกเรียกใช้เมื่อ for for วนซ้ำ แต่ไม่ใช่เมื่อฉันเรียกใช้ชุดคำสั่งในสคริปต์ของฉัน น่าเสียดายที่เนื้อหาของ $ somefile ยังไม่พร้อมสำหรับการตรวจสอบ ฉันจะรับคำสั่งให้ดำเนินการเมื่อฉันต้องการมันได้หรือไม่ในขณะที่ฉันกำลังสร้างสตริง?


2
อะไรคือความแตกต่างระหว่าง“ * .pl” และ * .pl ใน grep? ทำไมการอ้างถึงเปลี่ยนผลลัพธ์?
อะไรคือความแตกต่างระหว่าง: grep "string" . -r --include *.pl และ grep "string" . -r --include "*.pl" หลังรวมถึงไฟล์ในไดเรกทอรีย่อยในขณะที่อดีตไม่ ทำไม?

1
sudo -u ชื่อผู้ใช้ -s“ cmd arg” ไม่พบคำสั่งส่งคืน
ฉันเคยรันคำสั่ง: sudo -u elasticsearch -s "ulimit -Hn" และมันก็คืนค่า ulimit -Hn ตามที่เห็นโดยผู้ใช้ elasticsearch จนกว่าฉันจะลองบน Ubuntu 11.10 ที่นั่นมันส่งคืน: /bin/bash: ulimit -Hn: command not found ฉันลองคำสั่งที่แตกต่างกันสองสามข้อและเมื่อฉันใช้อาร์กิวเมนต์ฉันจะได้รับ "ไม่พบคำสั่ง": $ sudo -u elasticsearch -s "ls all.sh" /bin/bash: ls all.sh: command not found แนวคิดใดบ้างที่ฉันสามารถรันคำสั่งที่ต้องใช้อาร์กิวเมนต์ผ่านsudo?
10 sudo  quoting 


1
bashrc ขี้เกียจทดแทน
เราจะได้รับ~/.bashrcชื่อแทนเพื่อประเมินการ$()ทดแทนในเวลาทำงานแทนที่จะเป็นช่วงเวลาที่ดำเนินการ ~ / .bashrc (เมื่อเปิดเทอร์มินัล)? ฉันรันคำสั่งนี้บ่อยพอที่ฉันต้องการเพิ่มนามแฝง: svn diff -r $(svn info | grep ^Revision | awk {'print $2'}):HEAD $(svn info | grep ^URL | awk {'print $2'}) | colordiff อย่างไรก็ตามเมื่อฉันเพิ่มลง~/.bashrcในนามแฝงฉันเห็นว่าการประเมินผลนั้นได้รับการกำหนดค่าตายตัวในค่าที่พวกเขามีในขณะที่ฉันเปิดเทอร์มินัล: $ alias alias svnbranch='svn diff -r 178184:HEAD svn+ssh://branches/t4252 | colordiff' ถ้าฉันเปิดเทอร์มินัล~ฉันจะได้รับข้อผิดพลาด: svn: E155007: '/home/dotancohen' is not a working copy svn: …
10 bash  shell  quoting  alias  bashrc 

1
ทำความเข้าใจกับค่าเริ่มต้นของ IFS
ใน GNU bash รุ่น 4.2.8 ของฉัน IFS มีค่าเริ่มต้นของพื้นที่แท็บและตัวป้อนบรรทัดตามค่าเริ่มต้น: usr@T42 ~ $ echo -n "$IFS" | hexdump -C 00000000 20 09 0a | ..| 00000003 usr@T42 ~ $ มีเหตุผลสำหรับ IFS เริ่มต้นดังกล่าวหรือไม่ นอกจากนี้ที่สาธารณูปโภคใช้ไอเอฟเอนอกเหนือจากการทุบตีในตัวread?
10 bash  shell  quoting 

2
ส่งผ่านข้อโต้แย้งไปยังฟังก์ชั่นตรงตามที่เป็นอยู่
ฉันมีฟังก์ชั่นต่อไปนี้: bar() { echo $1:$2; } ฉันกำลังเรียกฟังก์ชั่นนี้จากฟังก์ชั่นอื่น , foo. fooตัวเองเรียกว่าดังนี้: foo "This is" a test ฉันต้องการรับผลลัพธ์ต่อไปนี้: This is:a นั่นคือข้อโต้แย้งที่ได้รับควรจะราชสกุลเดียวกันกับที่ผมผ่านเข้าไปbarfoo จะfooต้องมีการดำเนินการอย่างไรเพื่อให้บรรลุเป้าหมายนี้? ฉันได้ลองใช้งานสองแบบต่อไปนี้ แต่ก็ไม่ได้ผล: foo() { bar $*; } - เอาท์พุท: this:is foo() { bar "$*"; } - เอาท์พุท: this is a test: คำถามของฉันคือวิธีที่ฉันสามารถรักษาข้อโต้แย้ง เป็นไปได้ทั้งหมดหรือไม่

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