ฉันต้องทำการกำหนดค่าใด ๆ เพื่อเริ่มต้นการขยายรั้งหรือไม่ เมื่อผมทำงานก็แค่สร้างการตั้งชื่อmkdir {1..10} dir{1..10}
echo ${SHELL}เพื่อแสดงคำถามนี้เพื่อให้ได้คำตอบที่เป็นประโยชน์
ฉันต้องทำการกำหนดค่าใด ๆ เพื่อเริ่มต้นการขยายรั้งหรือไม่ เมื่อผมทำงานก็แค่สร้างการตั้งชื่อmkdir {1..10} dir{1..10}
echo ${SHELL}เพื่อแสดงคำถามนี้เพื่อให้ได้คำตอบที่เป็นประโยชน์
คำตอบ:
ในขณะที่การขยายตัวรั้งเช่น{1,2}ต้นกำเนิดในcshปลายปี 70 และพบวิธีการเปลือกหอยเหมือนบอร์นในbash/ zsh/ pdkshในช่วงปลายยุค 80 ต้น 90s {n1..n2}ตัวแปรที่มาครั้งแรกzshในปี 1995 (2.6-beta4)
bashคัดลอกในปี 2004 (3.0) และksh93ในปี 2005 ( ksh93r)
น่าจะเป็นเปลือกที่คุณกำลังพยายามในครั้งนี้คือค่าของคนเหล่านั้นหรือเป็นรุ่นเก่าและbashksh93
#!/bin/sh...
/bin/shเป็นหรือbash ksh93
/bin/sh ทำหน้าที่เป็นประวัติศาสตร์sh(มันเป็นสิ่งที่หน้าทุบตีกล่าวว่าต่อไป) ยังไม่ได้ตรวจสอบkshหน้าคน แต่ฉันแน่ใจว่ามันจะทำงานได้อย่างถูกต้อง
zsh) ก่อน วิธีแก้ปัญหาอีกอันคือการใช้บางอย่างเช่น "mkdir $ (seq 1 10)"
{x..y}การขยายช่วงรั้งจะดำเนินการใน bash 3.0-alpha เพื่อช่วยเราและตัวคุณเองโปรดแสดงecho "$BASH_VERSION"ผลลัพธ์ของคุณ
แล้วคำตอบ: ถ้า mkdir {1..10}สร้าง dir ที่มีชื่อแล้วคุณจะใช้รุ่นทุบตีก่อน{1..10} bash 3.0-alphaในกรณีนี้คุณสามารถใช้สำหรับการก่อสร้างแบบวนซ้ำเป็น:
for ((i=1;i<=10; i++)); do mkdir "$i"; done
ตรวจสอบเวอร์ชั่น Bash ของคุณ:
$ bash -version
GNU bash, version 4.1.7(1)-release (x86_64-redhat-linux-gnu)
Copyright (C) 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
ตรวจสอบด้วยmkdirว่าไม่ได้เป็นนามแฝงด้วยวิธีแปลก ๆ :
$ alias |grep mkdir
alias md='mkdir'
mkdir {1..10}ทำงานให้ฉันมันสร้างสิบ dirs