Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1182
  • 博文数量: 3
  • 博客积分: 90
  • 博客等级: 民兵
  • 技术积分: 25
  • 用 户 组: 普通用户
  • 注册时间: 2011-12-22 17:26
文章分类
文章存档

2011年(3)

我的朋友
最近访客

分类: Python/Ruby

2011-12-28 14:47:16

假設我們定義了一個變量為:
file=/dir1/dir2/dir3/my.file.txt
我們可以用 ${ } 分別替換獲得不同的值:
${file#*/}:拿掉第一條 / 及其左邊的字串:dir1/dir2/dir3/my.file.txt
${file##*/}:拿掉最後一條 / 及其左邊的字串:my.file.txt
${file#*.}:拿掉第一個 .  及其左邊的字串:file.txt
${file##*.}:拿掉最後一個 .  及其左邊的字串:txt
${file%/*}:拿掉最後條 / 及其右邊的字串:/dir1/dir2/dir3
${file%%/*}:拿掉第一條 / 及其右邊的字串:(空值)
${file%.*}:拿掉最後一個 .  及其右邊的字串:/dir1/dir2/dir3/my.file
${file%%.*}:拿掉第一個 .  及其右邊的字串:/dir1/dir2/dir3/my
記憶的方法為:
    # 是去掉左邊(在鑑盤上 # 在 $ 之左邊)
    % 是去掉右邊(在鑑盤上 % 在 $ 之右邊)
    單一符號是最小匹配﹔兩個符號是最大匹配。

${file:0:5}:提取最左邊的 5 個字節:/dir1
${file:5:5}:提取第 5 個字節右邊的連續 5 個字節:/dir2

我們也可以對變量值裡的字串作替換:
${file/dir/path}:將第一個 dir 提換為 path:/path1/dir2/dir3/my.file.txt
${file//dir/path}:將全部 dir 提換為 path:/path1/path2/path3/my.file.txt

${#var} 可計算出變量值的長度:
${#file} 可得到 27 ,因為 /dir1/dir2/dir3/my.file.txt 剛好是 27 個字節.

利用 ${ } 還可針對不同的變數狀態賦值(沒設定、空值、非空值):
${file-my.file.txt} :假如 $file 沒有設定,則使用 my.file.txt 作傳回值。(空值及非空值時不作處理)
${file:-my.file.txt} :假如 $file 沒有設定或為空值,則使用 my.file.txt 作傳回值。 (非空值時不作處理)
${file+my.file.txt} :假如 $file 設為空值或非空值,均使用 my.file.txt 作傳回值。(沒設定時不作處理)
${file:+my.file.txt} :若 $file 為非空值,則使用 my.file.txt 作傳回值。 (沒設定及空值時不作處理)
${file=my.file.txt} :若 $file 沒設定,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (空值及非空值時不作處理)
${file:=my.file.txt} :若 $file 沒設定或為空值,則使用 my.file.txt 作傳回值,同時將 $file 賦值為 my.file.txt 。 (非空值時不作處理)
${file?my.file.txt} :若 $file 沒設定,則將 my.file.txt 輸出至 STDERR。 (空值及非空值時不作處理)
${file:?my.file.txt} :若 $file 沒設定或為空值,則將 my.file.txt 輸出至 STDERR。 (非空值時不作處理)

tips:
以上的理解在於, 你一定要分清楚 unset 與 null 及 non-null 這三種賦值狀態.
一般而言, : 與 null 有關, 若不帶 : 的話, null 不受影響, 若帶 : 則連 null 也受影響.

  1. iamok 发表于 2003-12-31 19:54:58

  2. showvar() {
  3. var=${str-expr}
  4. echo \$var is $var
  5. echo \$str is $str
  6. }
  7. _____________________________
  8. ${str=expr}的结果
  9. [root@iamok -->root]# unset str
  10. [root@iamok -->root]# showvar
  11. $var is expr
  12. $str is expr
  13. [root@iamok -->root]# str=
  14. [root@iamok -->root]# showvar
  15. $var is
  16. $str is
  17. [root@iamok -->root]# str=999
  18. [root@iamok -->root]# showvar
  19. $var is 999
  20. $str is 999
  21. ${str:=expr}的结果
  22. [root@iamok -->root]# unset str
  23. [root@iamok -->root]# showvar
  24. $var is expr
  25. $str is expr
  26. [root@iamok -->root]# str=
  27. [root@iamok -->root]# showvar
  28. $var is expr
  29. $str is expr
  30. [root@iamok -->root]# str=999
  31. [root@iamok -->root]# showvar
  32. $var is 999
  33. $str is 999
  34. ${str-expr}的结果
  35. [root@iamok -->root]# unset str
  36. [root@iamok -->root]# showvar
  37. $var is expr
  38. $str is
  39. [root@iamok -->root]# str=
  40. [root@iamok -->root]# showvar
  41. $var is
  42. $str is
  43. [root@iamok -->root]# str=999
  44. [root@iamok -->root]# showvar
  45. $var is 999
  46. $str is 999
  47. ${str:-expr}的结果
  48. [root@iamok -->root]# unset str
  49. [root@iamok -->root]# showvar
  50. $var is expr
  51. $str is
  52. [root@iamok -->root]# str=
  53. [root@iamok -->root]# showvar
  54. $var is expr
  55. $str is
  56. [root@iamok -->root]# str=999
  57. [root@iamok -->root]# showvar
  58. $var is 999
  59. $str is 999
  60. ${str+expr}的结果
  61. [root@iamok -->root]# unset str
  62. [root@iamok -->root]# showvar
  63. $var is
  64. $str is
  65. [root@iamok -->root]# str=
  66. [root@iamok -->root]# showvar
  67. $var is expr
  68. $str is
  69. [root@iamok -->root]# str=999
  70. [root@iamok -->root]# showvar
  71. $var is expr
  72. $str is 999
  73. var=${str:+expr} 的结果
  74. [root@iamok -->root]# unset str
  75. [root@iamok -->root]# showvar
  76. $var is
  77. $str is
  78. [root@iamok -->root]# str=
  79. [root@iamok -->root]# showvar
  80. $var is
  81. $str is
  82. [root@iamok -->root]# str=999
  83. [root@iamok -->root]# showvar
  84. $var is expr
  85. $str is 999
  86. var=${str?expr} 的结果
  87. [root@iamok -->root]# unset str
  88. [root@iamok -->root]# showvar
  89. -bash: str: expr
  90. [root@iamok -->root]# str=
  91. [root@iamok -->root]# showvar
  92. $var is
  93. $str is
  94. [root@iamok -->root]# str=999
  95. [root@iamok -->root]# showvar
  96. $var is 999
  97. $str is 999
  98. var=${str:?expr} 的结果
  99. [root@iamok -->root]# unset str
  100. [root@iamok -->root]# showvar
  101. -bash: str: expr
  102. [root@iamok -->root]# str=
  103. [root@iamok -->root]# showvar
  104. -bash: str: expr
  105. [root@iamok -->root]# str=999
  106. [root@iamok -->root]# showvar
  107. $var is 999
  108. $str is 999

阅读(452) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:fork, source 与 exec

给主人留下些什么吧!~~