无法从逐行文本文件

时间:2018-02-21 11:06:45

标签: shell unix trim

我有一个shell脚本,它应该构建并运行SQL请求。 SQL请求如下所示:

select distinct USER from USER_CONNECTIONS where USER is not in ('user1','user2','user3')

这部分SQL请求:

('user1','user2','user3')

由shell函数构建,该函数读取包含以下数据的文本文件:

>> userList.txt
user1
user2
user3

该功能如下:

get_where_authorized()
{
    WHERE_NOT_IN="("
    while IFS='' read -r line || [[ -n "$line" ]]; do
        WHERE_NOT_IN+="'$line', "
    done < "DB_authorizations.txt"
    WHERE_NOT_IN+="'')"
    echo $WHERE_NOT_IN
}

因此,我将此字符串存储到变量中:

AUTHORIZED_USERS="$(get_where_authorized)"

...当我回显这个变量时,结果看起来不错:

bash$ echo $AUTHORIZED_USERS
('user1', 'user2', 'user3', '')

但是,当我尝试将此字符串用于我的SQL请求时,似乎在第一个用户之后有一个回车符(\n):

bash$ MY_SQL="select distinct USER from USER_CONNECTIONS where USER is not in $AUTHORIZED_USERS"
bash$ echo $MY_SQL
select distinct USER from USER_CONNECTIONS where USER is not in ('user1',

上面的SQL请求显然在执行时会产生错误。 我试图理解为什么会发生这种情况:当我回显变量AUTHORIZED_USERS时,似乎隐藏了回车符,但是当它在SQL字符串中使用时它们被捕获。

我试图修剪它们:

AUTHORIZED_USERS="$(get_where_authorized)" | tr -d '\n'

但仍然没有机会。 有谁有想法吗?

1 个答案:

答案 0 :(得分:0)

修剪&#39; \ r&#39;性格也是如此。 此外,修剪时使用的语法不正确。 &#39; $(变量)&#39;表现得像反引号并试图执行变量的值。

正确的代码应该是:

AUTHORIZED_USERS=$(echo "$get_where_authorized" | tr -d '\n' | tr -d '\r')