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

แท็กเพื่อแสดงคำถามใด ๆ ที่เกี่ยวข้องกับการวนซ้ำ

6
เหตุใดการวนซ้ำของผลลัพธ์ที่ไม่เหมาะสมของ find find
คำถามนี้ได้รับแรงบันดาลใจจาก เหตุใดการใช้เชลล์ลูปเพื่อประมวลผลข้อความจึงถือว่าไม่ดี? ฉันเห็นโครงสร้างเหล่านี้ for file in `find . -type f -name ...`; do smth with ${file}; done และ for dir in $(find . -type d -name ...); do smth with ${dir}; done ถูกใช้ที่นี่เกือบทุกวันแม้ว่าบางคนใช้เวลาในการแสดงความคิดเห็นในโพสต์เหล่านั้นอธิบายว่าทำไมสิ่งประเภทนี้ควรหลีกเลี่ยง ... การ เห็นจำนวนโพสต์ดังกล่าว (และความจริงที่ว่าบางครั้งความคิดเห็นเหล่านั้น ฉันคิดว่าฉันอาจถามคำถามเช่นกัน: ทำไมวนลูปfindของการส่งออกปฏิบัติไม่ดีและสิ่งที่เป็นวิธีการที่เหมาะสมในการทำงานอย่างน้อยหนึ่งคำสั่งสำหรับแต่ละชื่อไฟล์ / เส้นทางกลับโดยfind?
170 files  find  filenames  for 

1
จุดประสงค์ของคำหลัก "ทำ" ใน Bash สำหรับลูปคืออะไร
วัตถุประสงค์ของdoคำหลักในforไวยากรณ์วนซ้ำคืออะไร สำหรับฉันมันรู้สึกซ้ำซ้อน for i in `seq 1 2`; do echo "hi"; done ทำไมไวยากรณ์ไม่เป็นแบบนี้ for i in `seq 1 2`; echo "hi"; done ฉันแน่ใจว่ามันไม่กรอกวัตถุประสงค์ ฉันแค่ต้องการเรียนรู้
76 bash  shell  for 

4
ใน bash เป็นไปได้ไหมที่จะใช้ตัวแปรจำนวนเต็มในการควบคุมลูปของ for for loop
ฉันมีสคริปต์ทุบตีต่อไปนี้: #!/bin/bash upperlim=10 for i in {0..10} do echo $i done for i in {0..$upperlim} do echo $i done การforวนซ้ำครั้งแรก( โดยไม่มีตัวแปรupperlimในการควบคุมการวนซ้ำ) ทำงานได้ดี แต่การforวนซ้ำครั้งที่สอง( ด้วยตัวแปรupperlimในการควบคุมการวนซ้ำ) ไม่ทำงาน มีวิธีใดบ้างที่ฉันสามารถแก้ไขforลูปที่สองเพื่อให้ทำงานได้? ขอบคุณที่สละเวลา.
65 bash  shell  shell-script  for 

4
ฉันจะแทนที่ AND (&&) ในวง for ได้อย่างไร
ฉันต้องการหาสิ่งที่เทียบเท่า cmd 1 && cmd 2 && ... && cmd 20 แต่มีคำสั่งแสดงอยู่ภายในforลูปเช่น for i in {1..20} do cmd $i done คุณอยากแนะนำอะไรให้เปลี่ยนในนิพจน์ที่สองเพื่อหาค่าที่เท่ากัน

3
ในสคริปต์ bash shell ให้เขียน a for loop ที่วนซ้ำค่าสตริง
ใน bash ฉันรู้ว่ามันเป็นไปได้ที่จะเขียนforloop ซึ่งตัวแปรควบคุมการiวนซ้ำนั้นวนซ้ำตามจำนวนเต็มที่ระบุ ตัวอย่างเช่นฉันสามารถเขียน bash shell script ที่พิมพ์จำนวนเต็มระหว่าง 1 ถึง 10: #!/bin/bash for i in {1..10} do echo $i done เป็นไปได้หรือไม่ที่จะวนซ้ำตัวแปรการควบคุมลูปที่เป็นสตริงแทนถ้าฉันจัดเตรียมรายการสตริง? ตัวอย่างเช่นสมมติว่าฉันมีสตริงfnameที่แสดงชื่อไฟล์ ฉันต้องการเรียกชุดคำสั่งสำหรับแต่ละชื่อไฟล์ ตัวอย่างเช่นฉันอาจต้องการพิมพ์เนื้อหาของการfnameใช้คำสั่งเช่นนี้: #!/bin/bash for fname in {"a.txt", "b.txt", "c.txt"} do echo $fname done กล่าวอีกนัยหนึ่งในการทำซ้ำครั้งแรกfnameควรมีค่าfname="a.txt"ในขณะที่การทำซ้ำครั้งที่สองfnameควรมีค่าfname="b.txt"และอื่น ๆ น่าเสียดายที่ดูเหมือนว่าไวยากรณ์ข้างต้นไม่ถูกต้องนัก ฉันต้องการได้รับผลลัพธ์: a.txt b.txt c.txt แต่เมื่อฉันลองรหัสข้างต้นฉันได้ผลลัพธ์นี้: {a.txt, b.txt, c.txt} คุณช่วยฉันในการกำหนดไวยากรณ์ที่ถูกต้องเพื่อที่ฉันจะสามารถเปลี่ยนค่า / เนื้อหาของตัวแปรได้fnameหรือไม่? …
24 bash  shell-script  for 

4
หลีกเลี่ยงข้อผิดพลาดเนื่องจากเครื่องหมายดอกจันที่ไม่ขยาย
ในทุบตีฉันมักจะใช้ for-loops ดังต่อไปนี้ for file in *.type; do sommecommand "$file"; done; *.typeในการดำเนินการสำหรับทุกไฟล์ที่ตรงกัน หากไม่พบไฟล์ที่มีจุดจบนี้ในไดเรกทอรีใช้งานเครื่องหมายดอกจันจะไม่ถูกขยายและโดยปกติฉันจะได้รับข้อความแสดงข้อผิดพลาดที่บอกว่า somecommand ไม่พบไฟล์ ฉันสามารถคิดได้ทันทีหลายวิธีเพื่อหลีกเลี่ยงข้อผิดพลาดนี้ แต่การเพิ่มเงื่อนไขก็ไม่ได้ดูสวยงามมากนัก มีวิธีที่สั้นและสะอาดในการบรรลุเป้าหมายนี้หรือไม่?
16 bash  wildcards  for 

4
วนซ้ำผ่านโฟลเดอร์และไฟล์รายการ
ฉันมีโฟลเดอร์ชื่อ 'ตัวอย่าง' และมันมี 3 ไฟล์อยู่ในนั้น ฉันต้องการเขียนเชลล์สคริปต์ซึ่งจะอ่านไฟล์เหล่านี้ภายในโฟลเดอร์ตัวอย่างและโพสต์ไปยังไซต์ HTTP โดยใช้ curl ฉันเขียนสิ่งต่อไปนี้เพื่อแสดงรายการไฟล์ภายในโฟลเดอร์: for dir in sample/*; do echo $dir; done แต่มันให้ผลลัพธ์ต่อไปนี้กับฉัน: sample/log sample/clk sample/demo มันกำลังแนบโฟลเดอร์แม่ในนั้น ฉันต้องการผลลัพธ์ดังนี้ (ไม่มีชื่อโฟลเดอร์หลัก) log clk demo ฉันจะทำสิ่งนี้ได้อย่างไร

4
$ {! FOO} และ zsh
${!FOO}ทำการทดแทนสองครั้งในbashความหมายมันใช้ค่า (สตริง) ของ FOO และใช้มันเป็นชื่อตัวแปร zshไม่รองรับคุณสมบัตินี้ มีวิธีที่จะทำให้งานนี้ในเดียวกันbashและzsh? พื้นหลัง: ฉันมีรายการตัวแปรสภาพแวดล้อมเช่น PATH MAIL EDITOR และต้องการพิมพ์ชื่อตัวแปรก่อนหลังจากนั้นค่าของมัน ใช้งานbashได้ แต่ไม่ใช่zsh: for VAR in LIST do echo $VAR echo ${!VAR} done ควรเป็นไปได้ด้วย "วิธีเก่า" ด้วยevalแต่ฉันไม่สามารถทำงาน: for VAR in LIST do echo $VAR echo `eval \$$VAR` done ฉันไม่เคยจะเข้าใจว่าทำไมฉันถึงไม่สามารถทำการทดแทนอย่างลึกซึ้งโดยพลการอย่างเช่น${${VAR}}หรือแม้ว่า${${${VAR}}}จำเป็นต้องมีดังนั้นคำอธิบายสำหรับสิ่งนั้นก็จะดีเช่นกัน

3
หลายตัวแปรสำหรับลูป
มีวิธีการระบุตัวแปรหลายตัว (ไม่ใช่แค่จำนวนเต็ม) ในการforวนซ้ำbashหรือไม่? ฉันอาจมี 2 ไฟล์ที่มีข้อความใด ๆ ที่ฉันต้องทำงานด้วย สิ่งที่ฉันต้องการตามหน้าที่คืออะไร: for i in $(cat file1) and j in $(cat file2); do command $i $j; done ความคิดใด ๆ

4
วนซ้ำผ่านไฟล์ที่ไม่รวมไดเรกทอรี
ฉันต้องการสคริปต์ของฉันเพื่อทำบางสิ่งบางอย่างกับทุกไฟล์ในไดเรกทอรีปัจจุบันยกเว้นไดเรกทอรีย่อยใด ๆ ตัวอย่างเช่นในเส้นทางปัจจุบันมี 5 ไฟล์ แต่หนึ่งในนั้นคือโฟลเดอร์ (ไดเรกทอรีย่อย) สคริปต์ของฉันควรเปิดใช้งานคำสั่งที่กำหนดเป็นอาร์กิวเมนต์เมื่อเรียกใช้สคริปต์ดังกล่าว คือ "bash script wc -w" ควรให้จำนวนคำของแต่ละไฟล์ในไดเรกทอรีปัจจุบัน แต่ไม่ใช่โฟลเดอร์ใด ๆ เพื่อให้ผลลัพธ์ไม่เคยมีบรรทัด "/ sub / dir: เป็นไดเรกทอรี" สคริปต์ปัจจุบันของฉัน: #!/bin/bash dir=`pwd` for file in $dir/* do $* $file done ฉันแค่ต้องแยกไดเรกทอรีสำหรับวง แต่ฉันไม่รู้วิธี
11 bash  for 

4
bash loop เพิ่มขึ้น 0.02
ฉันต้องการสร้างห่วงสำหรับทุบตีด้วย 0.02 เป็นส่วนเพิ่มที่ฉันพยายาม for ((i=4.00;i<5.42;i+=0.02)) do commands done แต่มันไม่ทำงาน

2
วิธีการวนซ้ำ 3 ครั้งในสคริปต์ทุบตีเมื่อนักเทียบท่าดันล้มเหลว?
ฉันมีสคริปต์ทุบตีซึ่งเพียงนักเทียบท่าดันภาพ: docker push $CONTAINER_IMAGE:latest ฉันต้องการวนซ้ำ 3 ครั้งเมื่อสิ่งนี้ล้มเหลว ฉันจะทำสิ่งนี้ได้อย่างไร

2
ในการวนซ้ำอาร์เรย์ให้เพิ่มองค์ประกอบลงในอาร์เรย์
ฉันมีปัญหากับการวนซ้ำในทุบตี ตัวอย่าง: ("etc" "bin" "var")ฉันมีอาร์เรย์ และฉันทำซ้ำในอาร์เรย์นี้ แต่ในลูปฉันต้องการผนวกค่าลงในอาร์เรย์ เช่น array=("etc" "bin" "var") for i in "${array[@]}" do echo $i done นี้จะแสดงetc bin var(แน่นอนในบรรทัดที่แยกต่างหาก) และถ้าฉันผนวกหลังจากdoนั้น: array=("etc" "bin" "var") for i in "${array[@]}" do array+=("sbin") echo $i done ฉันต้องการ: etc bin var sbin(แน่นอนในบรรทัดที่แยกต่างหาก) สิ่งนี้ไม่ทำงาน ฉันจะทำมันได้อย่างไร
9 bash  array  for 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.