Как написать точную строку внутри блока вместо выполнения их?При использовании << EOF в Bash? - PullRequest
1 голос
/ 31 октября 2011

У меня есть файл configure.sh со следующим (он создает файл test.sh с конфигурацией, так что я могу наконец использовать этот test.sh в качестве основной задачи конфигурации). Но это не работает

cat > /var/tmp/test.sh << EOF
regex='value=(.*)'
for i in $(cat /var/tmp/test.ini);
do
    if [[ $i =~ $regex ]];
    then
        echo ${BASH_REMATCH[1]} 
        #or
        curl -v ${BASH_REMATCH[1]}
    fi
done
EOF

Когда выполняется файл configure.sh, он делает файл test.sh совершенно неправильным, например: reged = 'значение (. *)'

for i in 
original line1
original line1
original line1
original line1
do
  if [[ =~ ]];
  then 
  fi

done
EOF

Блок EOF не пишет точно так, как я установил выше. Как вы пишете такую ​​строку внутри EOF?

Ответы [ 2 ]

4 голосов
/ 31 октября 2011

Измените << EOF на << 'EOF' и оставьте EOF в конце без изменений. При таком цитировании EOF Bash не сможет выполнить расширения в здесь-документе.

1 голос
/ 31 октября 2011

От man bash, раздел Здесь документы :

Без расширения параметров, подстановка команд, арифметика расширение, или расширение имени пути выполняется для слова. Если какие-либо символы в слове цитируется, разделитель является результатом цитаты удаление по слову, а строки в здесь-документе не раскрываются.

Так что пишите << \EOF вместо << EOF.

...