sh vs bash
我有時候用 sh 會讓 shell script 執行不過,通常會報 Bad substitution 之類的錯誤。其實是因為我用 ubuntu,ubuntu 的 sh 其實是指到 dash 而非 bash。dash 在這不作多介紹, 把它想像成輕量型的 bash,所以支援的功能有限,所以有機會報錯。ubuntu: cd /bin/ ubuntu: /bin$ ls -l lrwxrwxrwx 1 root root 4 4月 9 16:36 sh -> dash
shell 字串操作
#!/bin/bash
# Shell 字串操作
# 執行 bash string.sh
file=/dir1/dir2/dir3/my.file.txt
# 字串刪減
# '#' 專刪右邊
echo ${file#*/} # 從左邊開始批配,刪掉 / 自身和其左邊的字串:dir1/dir2/dir3/my.file.txt
echo ${file##*/} # 從右邊開始批配,刪掉 / 自身和其左邊的字串:my.file.txt
echo ${file#*.} # 從左邊開始批配,刪掉 . 自身和其左邊的字串:file.txt
echo ${file##*.} # 從右邊開始批配,刪掉 . 自身和其左邊的字串:txt
# '%' 專刪右邊
echo ${file%/*} # 從右邊開始批配,刪掉 / 自身和其右邊的字串:/dir1/dir2/dir3
echo ${file%%/*} # 從左邊開始批配,刪掉 / 自身和其右邊的字串:
echo ${file%.*} # 從右邊開始批配,刪掉 . 自身和其右邊的字串:/dir1/dir2/dir3/my.file
echo ${file%%.*} # 從左邊開始批配,刪掉 . 自身和其右邊的字串:/dir1/dir2/dir3/my
# 取子字串
echo ${file:0:5} # 從 index 為 0 之字元,往後取 5 個:/dir1
echo ${file:5:5} # 從 index 為 5 之字元,往後取 5 個:/dir2
# 字串取代
echo ${file/dir/path} # 將第一個 dir 取代成 path:/path1/dir2/dir3/my.file.txt
echo ${file//dir/path} # 將全部的 dir 取代成 path:/path1/path2/path3/my.file.txt
exit 0
shell 陣列操作
# Array 操作
declare -a ARRAY # 宣告 array 可以省略
ARRAY=(first second third)
echo ${ARRAY[0]} # first
echo ${ARRAY[1]} # second
echo ${ARRAY[2]} # third
echo ${ARRAY[*]} # first second third
echo ${ARRAY[*]:1:2} # second third
echo ${ARRAY[@]:1:2} # second third
exit 0
上一篇 :
下一篇 :
0 意見:
張貼留言