变量无法正常运行的printf

时间:2019-04-28 01:02:07

标签: bash

我有一个bash脚本,它基于标识符从目录中的文件中提取并填充sqlite3表。问题在于,在填充表之前,我需要向拉出的字符串中添加字符。我想在变量之前和之后添加字符,在变量之前添加似乎可行,但是由于某种原因,我很难添加到末尾。我正在尝试使用awk和printf添加这些字符,并且我尝试仅连接字符串,但是两种解决方案都无法正常工作。

带有awk和printf的脚本是:

#!/bin/bash

sqlite3 review.sql "CREATE TABLE Review(Review_ID INTEGER PRIMARY KEY, Author TEXT, Date TEXT);"

path="/home/drew/Downloads/testcases/*"

for i in $path
do
        total=$(grep -c '<Author>' $i)
        count=1
        while [ $count -le $total ]
        do
                date=$(grep -m$count '<Date>' $i | sed 's#<Date>##' | tail -n1)
                author=$(grep -m$count '<Author>' $i | sed 's#<Author>##' | tail -n1 | awk '{printf "-      %s      -", $1}')
                echo $author
                ((count++))
        done
done

我不确定,但是我觉得我不需要使用printf向它添加回显,但是没有它,什么也不会打印。通过回显,我得到以下输出:

 -Jeanjakey
- kareem -
- may -
- RW53 -
 -Marilyn1949
 -AuntSusie006
 -madmatriarch
 -strollaround
 -lulubaby
 -tomu023
 -julcarl
 -slass

这似乎有些用,但是空格消失了,姓氏消失了,并且似乎对不同的输入做了不同的事情。通过字符串连接,我使用脚本:

#!/bin/bash

sqlite3 review.sql "CREATE TABLE Review(Review_ID INTEGER PRIMARY KEY, Author TEXT, Date TEXT);"


path="/home/drew/Downloads/testcases/*"

for i in $path
do
        total=$(grep -c '<Author>' $i)
        count=1
        while [ $count -le $total ]
        do
                date=$(grep -m$count '<Date>' $i | sed 's#<Date>##' | tail -n1)
                author2="-   "
                author2+=$(grep -m$count '<Author>' $i | sed 's#<Author>##' | tail -n1)
                author2+="    -"
                echo $author
                ((count++))
        done
done

我得到输出:

 -Jeanjakey
 -kareem jabron
 -may flow she
 -RW53 
 -Marilyn1949
 -AuntSusie006
 -madmatriarch
 -strollaround
 -lulubaby
 -tomu023
 -julcarl
 -slass

和字符串重新分配:

author2=$(grep -m$count '<Author>' $i | sed 's#<Author>##' | tail -n1)
author2="-   $author2     - "

给出相同的输出。

1 个答案:

答案 0 :(得分:0)

您需要引用变量的用法以防止外壳执行word splitting

尤其要尝试:

echo "$author"