как распознать \ n в bash - PullRequest
       34

как распознать \ n в bash

2 голосов
/ 08 ноября 2011

Есть такой скрипт:

#! /bin/bash

typeset -i i END
let END=500 i=1
remainder=1
accum="use yola_test;\n"
for ((i=1;i<=END;++i)); do 
#   str1=$( echo "$i" | md5sum | md5sum )
    title="title_$i"
#   "${str1:2:20}"
    accum="${accum}CALL add_new_enterprise(\"$title\");\n"
    let "remainder=$i % 100"
    if [ $remainder -eq 0 ]; then
        accum="${accum}SELECT count(*) as \`enterprises:\` FROM enterprise;\n"
        mysql --host=l --port=0 --user=r --password='!' --execute="$accum" 
        accum="use yola_test;\n"
    fi
done

Но для каждого \ n это дает мне "Pager set to stdout", могу ли я этого избежать, я знаю, что при его отображении я должен использовать опцию -e, но я читаю некоторые материалы о цитировании ANSI-C, но примеров нигде нет как это использовать.

Я пытался это сделать

mysql --host=l --port=0 --user=r --password='!' --execute="$( echo -e "$accum" )"

но это не имеет эффекта, и я думаю, что вызов для эха увеличит время выполнения.

Ответы [ 2 ]

3 голосов
/ 09 ноября 2011

@ pgl ответ - лучший подход для этого случая, но если вам действительно нужно было встраивать перевод строки в значение переменной, самое простое, что нужно сделать, это использовать форму цитирования bash $'...':

accum=$'use yola_test;\n'
...
accum="${accum}CALL add_new_enterprise(\"$title\");"$'\n'
...etc

Обратите внимание, что во втором примере выше используется сочетание типов кавычек;двойные кавычки для первой части, чтобы разрешить интерполяцию переменных, а затем $'...' для части, которая нуждается в интерпретации escape-последовательности.

Кстати, другой подход - определить переменную для хранения новой строки:

nl=$'\n'
accum="use yola_test;${nl}"
...
accum="${accum}CALL add_new_enterprise(\"$title\");${nl}"
...etc
2 голосов
/ 08 ноября 2011

«PAGER установлен в stdout» из MySQL - чтобы остановить его отображение, просто удалите экземпляры \ n из своего кода;они вам не нужны.

...