ฉันต้องทำการกำหนดค่าใด ๆ เพื่อเริ่มต้นการขยายรั้งหรือไม่ เมื่อผมทำงานก็แค่สร้างการตั้งชื่อ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
)
น่าจะเป็นเปลือกที่คุณกำลังพยายามในครั้งนี้คือค่าของคนเหล่านั้นหรือเป็นรุ่นเก่าและbash
ksh93
#!/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