Как иметь отдельные аргументы/переменные для чтения

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

sed -e '/^AAA$/{x;//d;g' -e'}' infile

или

sed '/^AAA$/{
x
//d
g
}' infile
1
29.11.2019, 08:13
1 ответ

Прежде всего, вы должны начать использовать кавычки. Наверняка вы заметили, что

if [ $REPLY = "command" ]
не работает (и выдает [: too many argumentsсообщение об ошибке ). если вы вводите командную строку с более чем одним словом. Вам нужно изменить это на
if [ "$REPLY" = "command" ]

Подход 1 :Прочитайте строку и извлеките первое слово

Полагаю, вы понимаете, что ваш текущий сценарий получает всю строку ввода в $REPLY. Но,если пользователь вводит cd /usr/local, вам не к чему сравнивать cd /usr/localс cd; вам нужно извлечь первое слово входной строки. Вы можете сделать это с помощью word1="${REPLY%% *}". Это пример расширения параметра, о которых вы можете прочитать в bash (1)или спецификации POSIX . Таким образом, вы можете изменить свой скрипт следующим образом:

     ︙
    if [ "$REPLY" = "clear" ]; then
        clear
    fi
 
    word1="${REPLY%% *}"
    if [ "$word1" = cd ]
    then
        $REPLY
    fi

Подход 2 :Прочитайте первое слово отдельно

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

.
     ︙
    read -p "ECLI$PWD/:>" cmd args
     ︙

    if [ "$cmd" = "clear" ]; then
        clear
    fi

    if [ "$cmd" = cd ]
    then
        cd "$args"
    fi

Подход 3 :Читать каждое слово отдельно

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

     ︙
    read -p "ECLI$PWD/:>" -a arr
     ︙
 
    if [ "${arr[0]}" = "clear" ]; then
        clear
    fi
 
    if [ "${arr[0]}" = cd ]
    then
        cd "${arr[1]}"
    fi
.
0
27.01.2020, 23:57

Теги

Похожие вопросы