PROMPT_COMMAND+="hey.sh;"
PROMPT_COMMAND Если установлено, значение выполняется как команда перед выдачей каждого основного запроса .
По умолчанию PROMPT_COMMAND
является , а не переменной среды . Это просто переменная оболочки .
Оба типа переменных доступны одинаково ( «$ переменная *»
), но переменные среды наследуются дочерними процессами, тогда как переменные оболочки не используются т.
По соглашению используются заглавные буквы переменные среды + переменные оболочки, которые настраивают вашу оболочку (PROMPT_COMMAND настраивает вашу оболочку), но сохраняют другие типы переменных в нижнем регистре.
В bash вы можете: объявить -p
, чтобы узнать, экспортируется ли переменная (= является переменной среды) или нет:
$ declare -p PATH
declare -x PATH=... #-x means it's exported
$ declare PROMPT_COMMAND
declare -- PROMPT_COMMAND=... #no -x so just a shell variable
Задание для paste
:
paste -d, {1,2}.txt
-d,
устанавливает разделитель как ,
. {1,2}.txt
- это расширение скобок, выполненное shell, будет расширено до 1.txt 2.txt
.
Если вы любите немного awk
:
awk 'NR==FNR {a[FNR]=$0; next} {print a[FNR], $0}' OFS=, {1,2}.txt
NR==FNR
будет истинным только для первого файла; {a[FNR]=$0; next}
создает массив a
с номерами записей в качестве ключей и записями в качестве значений
Для второго файла {print a[FNR], $0}
печатает элемент массива на соответствующем номере строки, за которым следует текущая запись; OFS=,
устанавливает разделитель полей вывода как ,
Пример:
$ cat 1.txt
1,2,3
4,5,6
7,8,9
$ cat 2.txt
10,11,12
13,14,15
16,17,18
$ paste -d, {1,2}.txt
1,2,3,10,11,12
4,5,6,13,14,15
7,8,9,16,17,18
$ awk 'NR==FNR {a[FNR]=$0; next} {print a[FNR], $0}' OFS=, {1,2}.txt
1,2,3,10,11,12
4,5,6,13,14,15
7,8,9,16,17,18