检查bash中字符串中的子字符串

use*_*216 3 linux bash

如果... else ..我需要一个句子来验证在bash中是否指定了字符串的文件名

for j in `ls `
do
    if [ "${j:(-3)}" == ".gz" ]; then
        Cmd="zcat"
    elif [ "${j:(-4)}" == ".bz2" ]; then
        Cmd="bzcat"
    else
        Cmd="cat"
    fi

    if [ $j ***contains*** "string1"]; then
        $cmd $j | awk -F"," '{print $4}' 
    elif [ $j  *contains*  "string2" ]; then 
        $cmd $j | awk -F"," '{print $2}'
    fi

done
Run Code Online (Sandbox Code Playgroud)

use*_*001 8

使用支持通配符的双括号:

if [[ $j == *string1* ]]; then
Run Code Online (Sandbox Code Playgroud)

另外,不要解析ls ; 使用glob代替:

代替

for j in `ls `
Run Code Online (Sandbox Code Playgroud)

使用

for j in *
Run Code Online (Sandbox Code Playgroud)

如果您不希望匹配不区分大小写,则可以设置shopt -s nocasematch选项:

shopt -s nocasematch
if [[ $j == *string1* ]]; then
Run Code Online (Sandbox Code Playgroud)