如果单词包含特定字母,则 IF 语句返回 true

ant*_*iks 1 bash string shell-script test

如果单词包含特定字母,我需要一个 if 语句来返回 true。例如:

var="information"
if [ $var contain "i" ]; then
....
else
...
fi
Run Code Online (Sandbox Code Playgroud)

Tig*_*ger 6

使用 aswitch或者case像这样怎么样:

#!/bin/sh

v="information"
case $v in
    *f*)
        echo "found \"f\" in ${v}";;
    *)
        echo "no match found in ${v}"
esac
exit
Run Code Online (Sandbox Code Playgroud)

请注意,如果指针存储在变量中,那么引用它很重要,这样它就不会被视为模式:

case $haystack in
  *"$needle"*) echo match
esac
Run Code Online (Sandbox Code Playgroud)

没有它,如果$needle*?例如,这将匹配任何干草堆(分别为非空干草堆)。

在任何情况下,$needle都不必是单个字符。它适用于任何字符串。

在许多 shell 中,它甚至适用于任何非空字节序列,即使它们不形成有效字符,但并非所有字符都会分解字符。例如,é在某些实现中,在以 UTF-8 (0xc3 0xa9) 编码的字符串中可能找不到 0xc3 字节。相反,当语言环境的编码为 BIG5-HKSCS 时,某些 shell 可能会在i内部找到?,其中?编码为 0xa3 0x69(与iASCII 一样为 0x69)。