2016-01-04 1 views
0

У меня есть сценарий оболочки, который принимает 2 аргумента. я запустить его следующим образомРазбор аргументов в Linux. Полная остановка равна нулю

myscript.sh 2015.0J.Oct 8.0.3 

Внутри сценария у меня есть много сложных вещей. В определенном месте, когда я использую эхо команды следующего

echo Argument 1 - $1 
echo Argument 2 - $2 

Я получаю выход в

Argument 1 - 2015 0J Oct 
Argument 2 - 8 0 3 

В основном все fullstops становится пустым пространством. Я пробовал отлаживать часами, но не смог найти решение. Я считаю, что это что-то действительно маленькое.

EDIT: Я думаю, что нашел решение.

Добавление

IFS= 

непосредственно перед эхо решения вопроса

+0

_Внутри сценария у меня много сложного материала_ - пожалуйста, взгляните на [mcve] –

+0

У вас на самом деле есть «echo» Аргумент 1 - $ 1 »или вы используете' echo Argument 1 - $ 1' (без кавычек)? Если последнее у вас также есть 'IFS = .' где-то в скрипте над этими строками? –

+0

У меня нет IFS =. Будет ли это решить проблему? –

ответ

2

Где-то в сценарии, выше тех echo линий у вас есть линия, как IFS=..

Эта линия устанавливает «Внутренний разделитель поля» на .. Это значение используется оболочкой для разделения значений на слова после выполнения разложений.

Так с этим набором (и с переменной без кавычек), когда оболочка расширяется $1 к 2015.0J.Oct тогда расщепляется, что в 2015, 0J и Oct и вы получите выход вы видите.

Первое исправление для этого состоит в том, чтобы процитировать ваши переменные расширения ... Всегда цитируйте свои переменные разложения.

echo "Argument 1 - $1" 
echo "Argument 2 - $2" 

Второе, чтобы исправить все, что в вашем скрипте требует, чтобы вы глобально изменить значение IFS не нужно вам сделать это. Изменения в IFS должны, как правило, облагаться как можно меньшим количеством кода (даже для отдельных команд, как это часто делается с помощью read).

Смежные вопросы