Как ссылаться на строки истории в скрипте оболочки? - PullRequest
0 голосов
/ 26 января 2020

Итак, я хочу воспроизвести несколько ранее использованных строк, используя для l oop и ссылаясь на строки истории. Как я сделал dir, затем cd в dir, а затем создаю файл, затем я удаляю все, и я хочу воспроизвести dir с файлом в нем, не удаляя, как я хочу использовать! 1! 2! 3, но как? Я попробовал эти методы:

for i in {1..3}
do   
   !$i
done

Но я пробовал callint! команда с $! и "!", конечно, ни сработало. Я тоже попробовал f c $ i, но ничего не произошло. Кто-нибудь может мне помочь?

1 Ответ

0 голосов
/ 26 января 2020

man bash говорит в разделе "РАСШИРЕНИЕ ИСТОРИИ":

Расширение истории выполняется сразу после прочтения полной строки, прежде чем оболочка разбивает ее на слова.

Это означает, что расширение истории происходит до раскрытия переменной, т.е. вы не можете использовать переменную вместо числа после !, потому что оболочка все еще не знает, какое значение она имеет.

Более того, не для интерактивных оболочек расширение истории отключено по умолчанию. Вы можете изменить его с помощью set, см. Например

#!/bin/bash
set -o history
set -H
ls
!-1
...