Как проверить, имеет ли строка пробелы в оболочке Bash

Если файлы необходимы на каждой странице, поместите их в единственный файл. Это сократит количество Запроса HTTP и улучшит время отклика (для большого количества посещений).

См. лучшая практика Yahoo для других подсказок

29
задан John Kugelman supports Monica 6 June 2019 в 18:03
поделиться

8 ответов

case "$var" in  
     *\ * )
           echo "match"
          ;;
       *)
           echo "no match"
           ;;
esac
26
ответ дан 28 November 2019 в 00:47
поделиться
[[ "$str" = "${str%[[:space:]]*}" ]] && echo "no spaces" || echo "has spaces"
9
ответ дан 28 November 2019 в 00:47
поделиться

You can use regular expressions in bash:

string="a b '' c '' d"
if [[ "$string" =~ \ |\' ]]    #  slightly more readable: if [[ "$string" =~ ( |\') ]]
then
   echo "Matches"
else
   echo "No matches"
fi

Edit:

For reasons obvious above, it's better to put the regex in a variable:

pattern=" |'"
if [[ $string =~ $pattern ]]

And quotes aren't necessary inside double square brackets. They can't be used on the right or the regex is changed to a literal string.

31
ответ дан 28 November 2019 в 00:47
поделиться
string="a b '' c '' d"
if [ "$string" == "${string//[\' ]/}" ]
then 
   echo did not contain space or single quote
else
   echo did contain space or single quote
fi
8
ответ дан 28 November 2019 в 00:47
поделиться

The portable way to do this is with grep:

S="a b '' c '' d"
if echo $S | grep -E '[ "]' >/dev/null
then
  echo "It's a match"
fi

...a bit ugly, but guaranteed to work everywhere.

4
ответ дан 28 November 2019 в 00:47
поделиться

Как насчет подхода, подобного:

$ A="some string"; echo $A | grep \  | wc -l
1
$ A="somestring"; echo $A | grep \  | wc -l
0

?

2
ответ дан 28 November 2019 в 00:47
поделиться
function foo() {
    echo "String: $*"
    SPACES=$(($#-1))
    echo "Spaces: $SPACES"
    QUOTES=0
    for i in $*; do
        if [ "$i" == "'" ]; then
            QUOTES=$((QUOTES+1))
        fi
    done
    echo "Quotes: $QUOTES"
    echo
}

S="string with spaces"
foo $S
S="single' 'quotes"
foo $S
S="single '' quotes"
foo $S
S="single ' ' quotes"
foo $S

возвращает:

String: string with spaces
Spaces: 2
Quotes: 0

String: single' 'quotes
Spaces: 1
Quotes: 0

String: single '' quotes
Spaces: 2
Quotes: 0

String: single ' ' quotes
Spaces: 3
Quotes: 2
1
ответ дан 28 November 2019 в 00:47
поделиться

Интересно, почему никто не упомянул набор [: space:]. Обычно вас интересует не только обнаружение космического персонажа. Мне часто нужно обнаружить любое пустое пространство, например TAB. Пример "grep" будет выглядеть так:

$ echo " " | egrep -q "[:space:]" && echo "Has no Whitespace" || echo "Has Whitespace"
Has Whitespace
$ echo "a" | egrep -q "[:space:]" && echo "Has no Whitespace" || echo "Has Whitespace"
Has no Whitespace
0
ответ дан 28 November 2019 в 00:47
поделиться