আমি প্রত্যাশা করেছিলাম যে:
$ rm *(1)*
(1)
নামে থাকা সমস্ত ফাইল সরিয়ে ফেলবে । আমি ভৃল ছিলাম. এটি ডিরেক্টরিতে থাকা সমস্ত ফাইল সরিয়ে ফেলে।
কেন?
আমি প্রত্যাশা করেছিলাম যে:
$ rm *(1)*
(1)
নামে থাকা সমস্ত ফাইল সরিয়ে ফেলবে । আমি ভৃল ছিলাম. এটি ডিরেক্টরিতে থাকা সমস্ত ফাইল সরিয়ে ফেলে।
কেন?
উত্তর:
থেকে man bash
:
*(pattern-list)
Matches zero or more occurrences of the given patterns
আপনার কাছে একটি গ্লোব এক্সপ্রেশন রয়েছে যা শূন্য বা আরও বেশি 1
গুলি দিয়ে শুরু হওয়া ফাইলগুলির সাথে মেলে - যা সমস্ত ফাইল।
এই গ্লোব্বিং আচরণটি অক্ষম করার একটি সহজ উপায় হ'ল \
প্রথম বন্ধনী থেকে বাঁচা:
rm *\(1\)*
অন্যথায় আপনি shopt -u extglob
আচরণটি অক্ষম করতে এবং shopt -s extglob
এটি পুনরায় সক্ষম করতে ব্যবহার করতে পারেন :
shopt -u extglob
rm *(1)*
shopt -s extglob
মনে রাখবেন যে স্টিফেন বলেছেন , এটি অক্ষম করে extglob
সক্ষম করা bash-completion
এটি সম্পূর্ণরূপে ফাংশনগুলি সঠিকভাবে কাজ না করার কারণ হতে পারে।
extglob
ডিফল্টরূপে নেই তবে আপনার যদি ইনস্টল ও সক্ষম করা থাকে তবে bash_completion দ্বারা চালু করা হয়। bash
এর মতো বিকল্পের স্থানীয় সুযোগ zsh
নেই।
bash-4.3
এতে একটি রিগ্রেশন রয়েছে যা *(1)*
লুকানো ফাইলগুলি প্রসারিত করে।
এটি সম্ভবত extglob
শেল বিকল্পের সাথে সম্পর্কিত । যদি আমি এটি বন্ধ করি তবে প্যাটার্নটি একটি ত্রুটি বার্তা উত্পন্ন করে:
martin@dogmeat:~$ shopt -u extglob
martin@dogmeat:~$ shopt extglob
extglob off
martin@dogmeat:~$ echo *(1)*
bash: syntax error near unexpected token `('
আমি যদি এটি চালু করি তবে মনে হয় এটি সমস্ত কিছুর সাথে মেলে। ম্যানপেজটি এই নিদর্শনগুলি নথিভুক্ত করে, আমি মনে করি সেগুলি সম্পর্কিত:
If the extglob shell option is enabled using the shopt builtin, several
extended pattern matching operators are recognized. In the following
description, a pattern-list is a list of one or more patterns separated
by a |. Composite patterns may be formed using one or more of the fol‐
lowing sub-patterns:
?(pattern-list)
Matches zero or one occurrence of the given patterns
*(pattern-list)
Matches zero or more occurrences of the given patterns
+(pattern-list)
Matches one or more occurrences of the given patterns
@(pattern-list)
Matches one of the given patterns
!(pattern-list)
Matches anything except one of the given patterns
আমি এমন কোনও ডকুমেন্টেশন দেখছি না যা উল্লেখ করে যে কোনও শীর্ষস্থানীয় চরিত্র ব্যতীত প্রথম বন্ধনী কী করে। যাইহোক, আপনি প্যারেন্সকে উদ্ধৃত করে সমস্যাটি সমাধান করতে পারেন:
martin@dogmeat ~ % echo *\(1\)*
A(1)b
এছাড়াও, আপনার প্যাটার্নটি ব্যবহার করতে echo
বা ls
পরীক্ষা করতে প্রথমে যদি আপনি নিশ্চিত যে এটি কাজ করছে :)
{
একটি ধনুর্বন্ধনী, (
একটি পেরেন (বা বৃত্তাকার বন্ধনী)।
{
= কোঁকড়ানো বন্ধনী, (
= বৃত্তাকার বন্ধনী, [
= বর্গাকার বন্ধনী। আমেরিকান ভাষায়: {
= ব্রেস, (
= পেরেন, [
= বন্ধনী। কিছুটা বিভ্রান্তিকর। আপনার যদি কখনও যা কিছু বলা হয় তা যাচাই করতে হয়, জারগন ফাইল - এএসসিআইআই যথেষ্ট সহায়ক।
{
একটি ফুল বন্ধনী, [
বর্গাকার বন্ধনী এবং (
এটি একটি বৃত্তাকার বন্ধনী বা আরও সাধারণভাবে কেবল বন্ধনী হয়। :-)
rm
কোনও প্যাটার্নটি ব্যবহার করিecho
, প্রকৃত কমান্ড দেওয়ার আগে আমি সর্বদা এটির আগে। অভ্যাসটি আমাকে একাধিকবার বাঁচিয়েছিল (যেহেতু, 6 বছর বা তার বেশি হিসাবে,DEL A: *.*
এবং এর মধ্যে পার্থক্যকে বিভ্রান্ত করেDEL *.* A:
)।