在 Linux 中檢查字串是否包含子字串


簡介

在 Linux 中處理字串可能有點棘手,但使用正確的工具可以輕鬆解決。許多 Linux 使用者必須執行的一項常見任務是檢查字串是否包含特定的子字串。這可以透過多種方法完成,包括正則表示式、字串操作命令以及PythonPerl等程式語言。但是,在本文中,我們將探討在 Linux 中檢查字串是否包含子字串的最流行且有效的方法之一,即使用特殊的 shell 變數IFS(內部欄位分隔符)。我們將討論 IFS 變數的預設值,瞭解其各種用例,並探討在 IFS 中設定自定義值的一些實現。

IFS 變數及其預設值

特殊的 shell 變數IFS確定 Bash 在拆分一系列字元字串時如何識別單詞邊界。IFS 預設值為一個包含空格、製表符和換行的三個字元的字串。可以使用以下命令進行檢查:

$ echo "$IFS" | cat -et

此命令的輸出將為:

^I$

“^I”表示製表符,$表示換行符。這意味著,預設情況下,Bash 將根據空格、製表符和換行符拆分字串。例如,如果我們有一個字串“foo bar foobar”,並且我們想檢查它是否包含子字串“bar”,我們可以使用以下命令:

string="foo bar foobar"
for i in $string
do
  echo "'$i' is the substring"
done

此命令的輸出將為:

'foo' is the substring
'bar' is the substring
'foobar' is the substring

這表明 IFS 變數的預設空格值用於將輸入字串拆分為單個子字串。

IFS 和單詞拆分

IFS 變數在單詞拆分中起著至關重要的作用,單詞拆分是根據 IFS 變數的值將字串拆分為單獨的單詞的過程。IFS 變數的預設空格、製表符和換行符值使得基於這些字元拆分字串變得很容易。但是,我們也可以在 IFS 變數中設定自定義值,以根據其他字元拆分字串。

在 IFS 中設定自定義值

除了使用預設的IFS值之外,我們還可以在 IFS 變數中設定自定義值。這有助於我們處理多個欄位分隔的字串。例如,如果我們有一個字串“foo:bar:foobar”,並且我們想檢查它是否包含子字串“bar”,我們可以使用以下命令:

string="foo:bar:foobar"
old_ifs="$IFS"
IFS=":"
for i in $string
do
  echo "'$i' is the splitted word"
done
IFS="$old_ifs"

此命令的輸出將為:

'foo' is the splitted word
'bar' is the splitted word
'foobar' is the splitted word

這表明透過將“:”的自定義值設定為 IFS,我們能夠根據“:”分隔符將輸入字串拆分為單個子字串。

IFS 和子字串檢查

通過了解IFS的行為並在其中設定自定義值,我們可以檢查字串是否包含特定的子字串。我們可以使用 for 迴圈並在輸入字串上迴圈,並檢查當前子字串是否等於目標子字串。如果是,我們就知道目標子字串存在於輸入字串中。

例如,假設您有一個字串“Hello world”,並且您想檢查它是否包含子字串“World”。我們可以使用以下命令:

string="Hello World"
IFS=" "
for i in $string
do
   if [ $i == "World" ]; then
      echo "The substring 'World' is present in the string 'Hello World'."
   fi
done

此命令迭代輸入字串,根據空格分隔符將其拆分為單個子字串,並檢查當前子字串是否等於目標子字串“World”。如果是,則列印一條訊息,表明子字串存在於輸入字串中。停用IFS

另一個需要考慮的重要事項是,我們還可以停用 IFS 以恢復 Bash 的預設行為。例如,如果我們有一個字串“foo bar foo:bar”,並且我們將 IFS 變數設定為“:” ,我們可以停用 IFS 以將其重置為其預設值,並根據空格、製表符和換行符拆分輸入字串。

string="foo bar foo:bar"
IFS=":"
for i in $string; do echo "[$i] extracted"; done
unset IFS
for i in $string; do echo "[$i] extracted"; done

第一個 for 迴圈將根據“:”分隔符提取子字串,而第二個 for 迴圈在停用 IFS 後將根據預設分隔符(空格、製表符換行符)提取子字串。

結論

在本文中,我們探討了IFS變數、其預設值以及如何在 IFS 中設定自定義值以檢查字串是否包含子字串。IFS 變數是用於文字處理和模式匹配的強大工具。通過了解其行為,我們可以使用它來檢查字串是否包含特定的子字串,這在許多 Linux 操作中可能是一項有用的任務。請記住,在執行此操作之前,始終測試您的命令。

更新於: 2023年1月20日

463 次檢視

啟動您的 職業生涯

透過完成課程獲得認證

開始學習
廣告
© . All rights reserved.