отображается только цифра «2» при использовании строки «read» для перенаправления содержимого одного файла в другой. - PullRequest
1 голос
/ 31 марта 2020

Содержимое скрипта:

#!/bin/bash

tempconf="/tmp/test.file"
while read line
do
        echo $line
done < test.conf > $tempconf

Содержимое test.conf:

[PORT]
  tcp_ports=7000-7200
  udp_ports=7000-8000, 40000-49999

[H323H]
  maxSendThreads=10
  maxRecvThreads=10

[SDK]
  appPwd=1111111
  amsAddress=192.168.222.208:8888

Содержимое выходного файла "/tmp/test.file "is:

[PORT]
tcp_ports=7000-7200
udp_ports=7000-8000, 40000-49999

2
maxSendThreads=10
maxRecvThreads=10

[SDK]
appPwd=1111111
amsAddress=192.168.222.208:8888

Вопрос в том, почему [H323H] оказывается 2. Буду признателен, если кто-нибудь сможет мне это объяснить.

1 Ответ

2 голосов
/ 31 марта 2020

[] имеет специальное значение для оболочки, оно просто означает «один символ, взятый из любого символа в скобках». Поэтому, когда вы запускаете

echo [H323H]

, оболочка ищет файл с именем или H, или 2, или 3 ... Если хотя бы один файл соответствует, [H323H] заменяется всеми соответствующими именами файлов в выход; в противном случае он воспроизводится как есть.

источник: https://unix.stackexchange.com/a/259385

Использование кавычек вокруг $line решит вашу проблему без необходимости проверять файлы, соответствующие этим символам ( что сделало бы скрипт не очень надежным)

#!/bin/bash

tempconf="/tmp/test.file"
while read -r line
do
    echo "$line"
done < test.conf > "$tempconf"
...