3 Bash
3.7.1 Khai trieˆ’n daˆ´u ngoa˘
kênh giao tác
[user]$ export name=value
Trong tru’o`’ng ho
˙’p này, taˆ´ t ca’ các chu’o’ng trình cha
˙y tu`’ heˆ
˙ vo’ (keˆ’ ca’ ba’n sao thu´’ hai cu’a chính heˆ
˙ vo’) se˜ có quyeˆ`n truy caˆ
˙p to´’i các bieˆ´n d¯u’o
˙’c gán nhu’ vaˆ˙y, tu´’c là su’’ du
˙ng giá tri˙cu’a chúng qua tên.
3.7 Khai trieˆ’n bieˆ’u thu´’c
Hay heˆ
˙ vo’ d¯o
˙c các câu leˆ˙nh nhu’ the´ nào?ˆ Khi heˆ
˙ vo’ nhaˆ ˙n d¯u’o
˙’c moˆ˙t dòng leˆ
˙nh này d¯ó caˆ`n thu
˙’c hieˆ˙n, nó (heˆ
˙ vo’) tru’o´’c khi cha
˙y câu leˆ
˙nh thu˙’c hieˆ˙n vieˆ
˙c "phân tích ngu˜’ pháp" dòng leˆ
˙nh này (gioˆ´ ng trong ngôn ngu˜’, phân tích chu’ ngu˜’, vi
˙ngu˜’). Moˆ
˙t trong nhu˜’ng bu’o´’c cu’a su
˙’ phân tích này là phép mo’’ hay khai trieˆ’n bieˆ’u thu´’c (expansion). Trongbashcó ba’y loa
˙i khai trieˆ’n bieˆ’u thu´’c: • Khai trieˆ’n daˆ´u ngoa˘
˙c (brace expansion); • Thay theˆ´ daˆ´u ngã (tilde expansion); • Phép theˆ´ các tham bieˆ´n và bieˆ´n soˆ´ ; • Phép theˆ´ các câu leˆ
˙nh; • Phép theˆ´ soˆ´ ho
˙c (thu˙’c hieˆ˙n tu`’ trái sang pha’i); • Phép chia tu`’ (word splitting);
• Khai trieˆ’n các maˆ˜u tên taˆ
˙p tin và thu’ mu
˙c (pathname expansion). Các thao tác này d¯u’o
˙’c thu˙’c hieˆ˙n theo d¯úng thu´’ tu
˙’ lieˆ˙t kê trên. Chúng ta se˜ xem xét chúng theo tu´’ tu
˙’ này.
3.7.1 Khai trieˆ’n daˆ´ u ngoa˘˙c ˙c
Khai trieˆ’n daˆ´u ngoa˘
˙c toˆ´ t nhaˆ´t minh ho
˙a trên ví du˙. Gia’ thieˆ´t, chúng ta caˆ`n ta
˙o thu’ mu ˙c con trong moˆ
˙t thu’mu
˙c nào d¯ó, hoa˘
˙c thay d¯oˆ’i ngu’o`’i dùng so’’ hu˜’u cu’a vài taˆ
˙p tin cùng moˆ˙t lúc. Có
theˆ’ thu
˙’c hieˆ˙n d¯ieˆ`u này nho`’ các câu leˆ
˙nh sau:
kênh giao tác
[user]$ mkdir /usr/src/unikey/{old,new,dist,bugs}
[root]# chown root /usr/{ucb/{ex,edit},lib/{ex?.?*,how_ex}
Trong tru’o`’ng ho
˙’p d¯aˆ`u, trong thu’ mu˙c/usr/src/unikey/se˜ ta
˙o ra các thu’ mu ˙c con
old,new,dist, vàbugs. Trong tru’o`’ng ho
˙’p thu´’hai, ngu’o`’i dùng so’’ hu˜’u cu’a các taˆ
˙p tin sau se˜ thay d¯oˆ’i (thành root):
• /usr/ucb/ex • /usr/lib/ex?.?
• /usr/ucb/edit • /usr/lib/ex?.? • /usr/ucb/ex • /usr/lib/how_ex • /usr/ucb/edit • /usr/lib/how_ex
Tu´’c là vo´’i moˆ˜i ca˘
˙p daˆ´u ngoa˘
˙c se˜ ta
˙o ra vài dòng riêng re˜ (soˆ´ nhu˜’ng dòng này ba˘`ng soˆ´ tu`’ na˘`ng trong daˆ´u ngoa˘
˙c) ba˘`ng cách ghi thêm vào tru’o´’c moˆ˜i tu`’trong ngoa˘
˙c nhu˜’ng gì d¯u´’ng tru’o´’c daˆ´u ngoa˘
˙c, và ghi thêm vào sau moˆ˜i tu`’ này nhu˜’ng gì d¯u´’ng sau daˆ´u ngoa˘ ˙c. Moˆ
˙t ví du˙ khác: dònga{d,c,b}ekhi khai trieˆ’n se˜ thu d¯u’o
˙’c ba tu`’ "ade ace abe". Khai trieˆ’n daˆ´u ngoa˘ ˙c d¯u’o
˙’c thu˙’c hieˆ˙n tru’o´’c các da
˙ng khai trieˆ’n khác trong dòng leˆ
˙nh, ho’n nu˜’a taˆ´t ca’ các ký tu ˙’ d¯a˘˙c bieˆ
˙t có trong dòng leˆ
˙nh, keˆ’ ca’ nhu˜’ng ký tu
˙’ na˘`m trong daˆ´ u ngoa˘
˙c, se˜ d¯u’o
˙’c giu˜’ không thay d¯oˆ’i (chúng se˜ d¯u’o
˙’c biên di˙ch o’’ các bu’o´’c phía sau).