Это проблемы КШ.

Я столкнулся с некоторыми проблемами с переменными и кавычками сегодня. Порядок не имеет значения, хотя я не могу прочитать сценарии, а только выполнить его.

SomeScripts.sh "First=Harvey Lo","Third=Rebecca Won","Second=laugh at"

Результаты:

Harvey Lo laugh at Rebecca Won

но если я попытаюсь поместить его в файл сценариев ksh, это не сработает:

#!/bin/ksh
SOMEVAR=\"First=Harvey Lo\",\"Third=Rebecca Won\",\"Second=laugh at\"
SomeScripts.sh ${SOMEVAR}

Результаты:

Error: No. of ARGS > 3

Я даже пробую следующее, но все равно не работаю.

#!/bin/ksh
SOMEVAR=\"First=Harvey Lo\",\"Third=Rebecca Won\",\"Second=laugh at\"
SomeScripts.sh `echo ${SOMEVAR}`

Результаты:

Error: No. of ARGS > 3

Кто-нибудь может помочь, все, что я знаю, что есть некоторые Java внутри SomeScripts.sh, фактическая функция имеет более 20 параметров, но я упростил, как показано.

Исходный файл справки:

SomeScripts.sh First=Harvey,Third=Rebecca,Second=laugh
Harvey laugh Rebecca

1 ответ1

1

Вы должны понимать, что ваш первый пример имеет только один параметр, а способ его цитирования - только деталь. Они идентичны:

SomeScripts.sh "First=Harvey Lo","Third=Rebecca Won","Second=laugh at"

SomeScripts.sh "First=Harvey Lo,Third=Rebecca Won,Second=laugh at"

Таким образом, способ заставить его работать - не помещать \" внутри переменной - вместо этого вам нужно заключить его в кавычки, пока он установлен:

SOMEVAR="First=Harvey Lo","Third=Rebecca Won","Second=laugh at"

Опять же, это эквивалентно простому

SOMEVAR="First=Harvey Lo,Third=Rebecca Won,Second=laugh at"

Вам также нужно заключать в кавычки переменную, когда она используется, иначе она будет разделена на слова после расширения. (Разделение слов здесь означает просто разделение по пробелам.) То же самое относится и к ` ` замене».

SomeScripts.sh "$SOMEVAR"

Попробуйте скомпилировать эту программу и запустить ее с разными аргументами в кавычках - она покажет вам, что именно она получает в качестве аргументов.

#include <stdio.h>
int main(int argc, char *argv[]) {
    printf("argc = %d\n", argc);
    for (argc=0; argv[argc]; argc++)
        printf("argv[%d] = %s\n", argc, argv[argc]);
    return 0;
}

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .