在 bash 腳本中分割字串

在 bash 腳本中分割字串

我正在接受用戶的一些輸入並檢查有關的詳細資訊。

例子:

$HOME/Documents/test/one.txt

我將上面的字串作為輸入並想要檢索one.txt,我需要進一步進行one.txt

答案1

@Jordanm 已經為您提供了適用於任何字串的規範答案。如果您專門處理路徑,您也可以使用程式basenamedirname

   basename - strip directory and suffix from filenames
   dirname - strip last component from file name

例如:

$ file="$HOME/Documents/test/one.txt"
$ dir=$(dirname "$file");
$ name=$(basename "$file");
$ echo "The file called $name is in the directory $dir"
The file called one.txt is in the directory /home/terdon/Documents/test

答案2

這是一個常見的任務,可以由參數擴充在任何 POSIX shell 中。

path=$HOME/Documents/test/one.txt
file=${path##*/} # file contains one.txt

另一種常見的方法是使用 basename 程式。

file=$(basename "$path")

唯一的缺點是必須產生外部程式。它的主要優點是它可以正確處理帶有尾隨的路徑/

答案3

如果您使用檔案名稱執行此操作,請使用下列basename命令:

$ basename $HOME/Documents/test/one.txt
one.txt

更遠:

$ FILE=$(basename basename $HOME/Documents/test/one.txt)
$ echo $FILE
one.txt

如果您需要用任意分隔符號分割任意字串,這有點神奇。將字串讀入數組,並將輸入字段分隔符號設定為分隔符號。

這是一個例子:

$ IFS='/' read -a my_array <<< "$HOME/Documents/test/one.txt"
$ ARRAY_LENGTH=$(( ${#my_array[@]} - 1 ))
$ echo "${my_array[$ARRAY_LENGTH]}"
one.txt

相關內容