Никакой путь, но если Вы используете Make-файл, нет пути:
TARGET=hello
CFLAGS=-Wall -D_BSD_SOURCE hello-world.c
all:
cc -o $(TARGET) $(CFLAGS) -DCFLAGS="\"$(CFLAGS)\""
Вы ищете размер массива панели:
#!/bin/bash
read foo
bar=(${foo})
case ${#bar[@]} in
0) echo "bar has 0 words" ;;
1) echo "bar has 1 word" ;;
*) echo "bar has > 1 words" ;;
esac
В зависимости от входа Вы получаете информацию, сколько содержит панель слов. ${#bar[@]}
дает панель числа элементов, содержит.
С любой подобной Границе оболочкой:
case $bar in
"" | *[!$IFS]*[$IFS]*[!$IFS]*) echo empty or multi-word;;
*) echo OK
esac
Или:
set -f
set -- $bar
if [ "$#" -eq 1 ]; then
echo OK
else
echo empty of multi-word, words being:
printf ' "%s"\n' "$@"
fi
Установите IFS на разделителя слов. Например, если слова предназначены, чтобы быть непустыми строками:
IFS='
'
У Вас может просто быть небольшая функция та проверка на это. Это - пример с несколькими тестами:
empty_or_multiline()
{
[ -z "$1" ] && return 0
count=$(echo "$1" | wc -l)
[ $count -gt 1 ] && return 0
return 1
}
# test number 1
bar=
if empty_or_multiline "$bar"
then
echo Empty or multiline
else
echo bar="$bar"
fi
# test number 2
bar=jajhsflgkh
if empty_or_multiline "$bar"
then
echo Empty or multiline
else
echo bar="$bar"
fi
# test number 3
bar="kjh\nskjfjhgf"
if empty_or_multiline "$bar"
then
echo Empty or multiline
else
echo bar="$bar"
fi
echo
и для bash
на среде и/или как bash
был скомпилирован. Посмотрите, Почему printf лучше, чем эхо для деталей.
– Stéphane Chazelas
04.02.2014, 12:22
if [ $bar ]
сif [ ${#bar[@]} == 1 ]
.Потрясающе. – user857990 04.02.2014, 11:30foo
'*'
например,$bar
будет содержать названия всех файлов в текущем каталоге. – Stéphane Chazelas 04.02.2014, 11:40set -f;read foo;set +f
распространенный способ предотвратить globbing? – 04.02.2014, 11:50set -f
в действительности вbar=($foo)
, это - когда Вы используете split+glob оператор (оставляющий переменное закрывшее кавычки расширение) и только хотите часть разделения.read
не делает globbing. – Stéphane Chazelas 04.02.2014, 11:52