Назад | Перейти на главную страницу

Написание bash-скрипта не дает ожидаемого результата

Это сценарий bash, который я пишу. Вы можете увидеть ожидаемый результат. Но я получаю кое-что еще. Где я мог ошибиться?

#!/bin/bash
    #Demostrate how read actually works
    echo What cars do you like?

    read car1 car2 car3

    echo Your first car was: $car1
    echo Your second car was: $car2
    echo Your third car was: $car3

Ожидаемый результат

./cars.sh
What cars do you like?
Jaguar Maserati Bentley Lotus
Your first car was: Jaguar
Your second car was: Maserati
Your third car was: Bentley Lotus

Фактический выход

[root@localhost ~]# ./cars.sh
What cars do you like?
Jaguar
Your first car was: Jaguar
Your second car was:
Your third car was:
[root@localhost ~]#

Если у вас есть переменное количество входных аргументов, вы можете использовать переменную массива, используя read -a variable_name как в этом примере.

Пример: cars.sh

#!/bin/bash

read -a cars -p "What cars do you like? "

echo "You have entered ${#cars[@]} cars"

declare -i count=0
for car in "${cars[@]}"; do
        echo "Car number $(( ++count )) was: $car"
done

Вывод:

$ ./cars.sh
What cars do you like? bmw audi mercedes
You have entered 3 cars
Car number 1 was: bmw
Car number 2 was: audi
Car number 3 was: mercedes

Во втором случае вы не предоставляете все значения переменных. В вашем сценарии нет ничего плохого.

# bash -x cars.sh
# What cars do you like?
# Jaguar Maserati Bentley Lotus

Попробуйте выполнить отладку с помощью -x, если проблема не исчезнет.