在 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

相关内容