Как определить и установить переменную из файла?

cat не знает о сигналах echo. Он получает состояние конца -из -файла на man pipe (7):

If all file descriptors referring to the write end of a pipe have been closed, then an attempt to read(2) from the pipe will see end- of-file (read(2) will return 0).

Однако для записи в канал существует SIGPIPE. См. ту же справочную страницу

0
23.11.2020, 23:23
2 ответа

Использование пасты, как в ответе @αғsнιη, но с более простой обработкой

while IFS=$'\t' read num value; do
  declare "_$num=$value"
done < <(paste {one,two}.txt)

, затем

$ echo "$_21"
Hi how are you

$ echo "$_22"
Hello who are you

$ echo "$_23"
May I help you
3
18.03.2021, 22:47
eval "$(paste -d"_=''" /dev/null <(tr -d \" <one) /dev/null two /dev/null)"

pasteфайлы/ввод с -d="..."разделителями, определенными в списке.

мы использовали /dev/nullв качестве фиктивного ввода, чтобы сгенерировать первый _и поместить содержимое второго файла twoв одинарную кавычку, чтобы избежать расширения каждого файла, если они содержат переменные, подстановку команд; как для ввода ниже:

один.txt:

"21"
"22"
"23"

два.txt:

"Hi $(date) how are you"
"Hello who are you"
"May I help you"

Выход::

_21='"Hi $(date) how are you"'
_22='"Hello who are you"'
_23='"May I help you"'

$ echo "${_21}"
"Hi $(date) how are you"

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

$ eval "$(paste -d"_=" /dev/null <(tr -d \" <one) two )"
$ echo "${_21}"
Hi Tue 24 Nov 2020 12:47:40 AM +0330 how are you
1
18.03.2021, 22:47

Теги

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