我有一个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'
但仍然没有机会。 有谁有想法吗?
答案 0 :(得分:0)
修剪&#39; \ r&#39;性格也是如此。 此外,修剪时使用的语法不正确。 &#39; $(变量)&#39;表现得像反引号并试图执行变量的值。
正确的代码应该是:
AUTHORIZED_USERS=$(echo "$get_where_authorized" | tr -d '\n' | tr -d '\r')