bash - 将包含反斜杠的字符串读入 bash 中的变量

标签 bash sed awk

好的,所以我有一个用户和密码的 CSV 文件,密码有时包含反斜杠,我需要遍历这个文件并将用户和密码传递给另一个脚本,但我不知道如何制作 bash将反斜杠作为文字字符。

csv:

jgalley@debian1mig:~/logs/zimbraShares$ cat test.csv 
user3@domain.com,bzfbx6bkuu\Mpull
user2@domain.com,Hppk8mll\kffbsfd
user1@domain.com,w1fgfqbjlhLjnni\

Sed 没有扩展反斜杠 - 这很好:

jgalley@debian1mig:~/logs/zimbraShares$ cat test.csv | sed "s/,/\t/" 
user3@domain.com        bzfbx6bkuu\Mpull
user2@domain.com        Hppk8mll\kffbsfd
user1@domain.com        w1fgfqbjlhLjnni\

尝试将它们读入变量会导致反斜杠成为元字符,如您所见,它会转义字符并导致最后一行转义返回字符,因为它位于末尾:

jgalley@debian1mig:~/logs/zimbraShares$ cat test.csv | sed "s/,/\t/" | while read user pass; do echo "${user},${pass}"; done
user3@domain.com,bzfbx6bkuuMpull
user2@domain.com,Hppk8mllkffbsfd

首先尝试转义反斜杠也不起作用:

jgalley@debian1mig:~/logs/zimbraShares$ cat test.csv | sed "s/,/\t/" | sed "s/\\\/\\\\/g" | while read user pass; do echo "${user},${pass}"; done
user3@domain.com,bzfbx6bkuuMpull
user2@domain.com,Hppk8mllkffbsfd
jgalley@hoth1mig:~/logs/zimbraShares$ 

最终目标是做这样的事情:

head test.csv | sed "s/,/\t/g" | while read auser apass;
do 
  echo -n "${auser},${apass}"
  bash -c  "/home/jgalley/scripts/someScript.php -u '${auser}' -p '${apass}' -d '${auser}'";      
done

最佳答案

使用read-r选项:

while read -r auser apass;

如果给出 -r\ 将不会被视为转义字符。

关于bash - 将包含反斜杠的字符串读入 bash 中的变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14104524/

相关文章:

linux - inotifywait 在 Bash 中使用 fifo 队列

bash - 如何在 bash 脚本中创建 for 循环?

regex - 在 sed 语句中组合多个正则表达式

linux - 在 Linux 中选择 csv 中的缩写

arrays - Bash,条件数组,postgres select

linux - BASH:替换引号并检查是否为空

linux - 每分钟运行一次 sed 命令

string - grep 查找文件中的一行,然后删除该行

awk - 需要将文件中的\x0d\x0a替换为\x2c\x0d\x0a

linux - gawk 字符串提取 ([ :alnum][:alnum][:alnum] and [:alnum])