ทำไมไม่รองรับส่วนขยายของรั้ง?


9

ฉันต้องทำการกำหนดค่าใด ๆ เพื่อเริ่มต้นการขยายรั้งหรือไม่ เมื่อผมทำงานก็แค่สร้างการตั้งชื่อmkdir {1..10} dir{1..10}


mkdir {1..10}ทำงานให้ฉันมันสร้างสิบ dirs
suspectus

2
ฉันแนะนำให้เพิ่มecho ${SHELL}เพื่อแสดงคำถามนี้เพื่อให้ได้คำตอบที่เป็นประโยชน์
แดน

คำตอบ:


11

ในขณะที่การขยายตัวรั้งเช่น{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...
polemon

3
@ โปลโมนนั่นไม่จำเป็นว่าจะช่วยได้ ยกตัวอย่างเช่นในบางระบบ/bin/shเป็นหรือbash ksh93
Stéphane Chazelas

2
ฉันคิดว่าจริง ๆ แล้วมัน: ขึ้นอยู่กับการภาวนาเปลือกหอยที่เรียกว่า/bin/sh ทำหน้าที่เป็นประวัติศาสตร์sh(มันเป็นสิ่งที่หน้าทุบตีกล่าวว่าต่อไป) ยังไม่ได้ตรวจสอบkshหน้าคน แต่ฉันแน่ใจว่ามันจะทำงานได้อย่างถูกต้อง
polemon

1
@ user43312: ทำไมคุณยังใช้ RH9 อยู่ มันไม่ได้ถูกทำลายเป็นเวลาหลายปี AS Stephane เขียนว่าเป็นคุณลักษณะของเวอร์ชันทุบตีล่าสุด ดังนั้นจึงไม่น่าเป็นไปได้มากที่รุ่นทุบตีของคุณจะรองรับ คุณสามารถตรวจสอบเวอร์ชั่นได้โดยใช้ bash --version และเพื่อให้แน่ใจว่าคุณใช้ bash shell หรือไม่โดยตรวจสอบตัวแปร $ SHELL หรือเพียงแค่เรียกใช้ ps หากต้องการใช้คุณสมบัตินี้คุณอาจลองเริ่ม zsh shell ( zsh) ก่อน วิธีแก้ปัญหาอีกอันคือการใช้บางอย่างเช่น "mkdir $ (seq 1 10)"
Bram

1
@polemon พฤติกรรมการเริ่มต้นของเชลล์อื่น (เช่น. ซึ่งไฟล์มันมาเมื่อเริ่มต้น) ไม่เลียนแบบเชลล์อื่น
Chris Down

4

{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


1

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