Bourne Shell - Как определить, что первым параметром является '' - PullRequest
1 голос
/ 23 февраля 2012

Как скрипт Bourne Shell может узнать, что первый полученный им параметр был '' (две одинарные кавычки?

Я пробовал

if [ -z "$1" ] ; then
    echo "Wrong number of parameters"
fi

Но, похоже, $1 расширяется до пустой строки и "$1".

Ответы [ 4 ]

3 голосов
/ 23 февраля 2012

Когда вы вводите '' в командной строке, переводите ее в аргумент - строка нулевой длины.Проверьте переменную, которая содержит число или аргументы (перед проверкой -z "$ 1").

# check for any arguments
if [ "$#" -eq 0 ]; ...
# or -- has arguments and first one is ''
if [ "$#" -gt 0 -a -z "$1" ]; ...

См. 'Man test' для сравнительных тестов INTEGER (-eq, -gt и т. Д.).

РЕДАКТИРОВАТЬ (основываясь на комментариях к вопросу):

В Windows (какую оболочку вы используете?) Вы должны проверить '' (два символа) (я думаю, cmd.exe передает его таким образом)В Linux ваш скрипт получает аргумент с нулевой длиной строки.

if [\ ("$ #" -gt 0 -a -z "$ 1" \) -o "$ 1" = "''"];...

1 голос
/ 23 февраля 2012

Я предполагаю, что вы имеете в виду, что параметр был передан, но его значение пусто .Вот как это проверить:

if [ $# -gt 0 -a "$1" = '' ]
then
    echo '$1 was passed, but empty'
fi

Если вы хотите проверить , сколько параметров было передано (пусто или нет), тогда используйте $# (количество аргументов):

if [ $# -eq 0 ]
then
    echo 'no parameters were passed'
fi

Если вы хотите проверить разницу между двумя двойными кавычками ("") и одинарными кавычками (''), нет способасделать это в оболочке Bourne в одиночку.К тому времени, когда ваш код будет выполнен, эти строки будут преобразованы в пустую строку.

0 голосов
/ 23 февраля 2012
if [ "$1" == "--" ] ; then
     echo "Wrong number of parameters"
fi
0 голосов
/ 23 февраля 2012

'' явно не пустая строка;он содержит два символа.Выполните

[ "$1" = "''" ]

Но затем в командной строке (Linux) вам нужно будет передать параметр как

./script.sh "''"
...