Saya dapat menjalankan perintah ini dari prompt baris perintah saya:
cp -r folder/!(exclude-me) ./
Untuk secara rekursif menyalin semua konten folder
kecuali untuk subdirektori yang disebutkan exclude-me
dalam direktori saat ini. Ini berfungsi persis seperti yang dimaksudkan. Namun, saya perlu ini bekerja dalam skrip bash yang saya tulis, di mana saya memilikinya:
if [ -d "folder" ]; then
cp -r folder/!(exclude-me) ./
rm -rf folder
fi
Tetapi ketika saya menjalankan skrip:
bash my-script.sh
Saya mendapatkan ini:
my-script.sh: line 30: syntax error near unexpected token `('
my-script.sh: line 30: ` cp -r folder/!(exclude-me) ./'
Dan saya bingung mengapa itu bekerja dari command prompt, tetapi baris yang sama persis tidak bekerja dalam skrip bash.
sumber
env > file1
skrip dan mengeksekusi./it
, dan kemudianenv > file2
dansource it
, dengan harapan bahwa saya akan menemukan perbedaan dalamenv
s, yang tidak terjadi. Bagaimana saya bisa secara program mencantumkan semua perbedaan antara dua shell (dalam hal ini interaktif vs non-interaktif)?Tambahkan baris ini di dekat bagian atas skrip Anda:
!(...)
adalah fitur pencocokan pola yang diperluas, Anda perluextglob
opsi untuk menggunakannya. Lihat shopt builtin untuk lebih jelasnya.sumber