Bashスクリプトで文字列を分割する

Bashスクリプトで文字列を分割する

ユーザーの意見を聞き、関連する詳細を確認しています。

例:

$HOME/Documents/test/one.txt

上記の文字列を入力として持っていて、それを検索したいと思いますone.txt。さらに進む必要がありますone.txt

答え1

@Jordanmはすでにすべての文字列に適用される正式な答えを提供しています。パスを具体的に扱う場合は、プログラムと次のものを使用することもbasenameできますdirname

   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シェルで。

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

関連情報