Bash 带有变量的printf未按预期工作

Bash 带有变量的printf未按预期工作,bash,Bash,我有一个bash脚本,它根据标识符从目录中的文件中提取并填充sqlite3表。问题是,在填充表格之前,我需要向被拉入的字符串中添加字符。我想在变量之前和之后添加字符,在之前添加似乎有效,但由于某些原因,我在添加到末尾时遇到了困难。我尝试用awk和printf添加这些字符,并且尝试将字符串连接起来,但这两种解决方案都没有达到预期效果 带有awk和printf的脚本是: #!/bin/bash sqlite3 review.sql "CREATE TABLE Review(Review_ID IN

我有一个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
它似乎有些作用,但间距消失了,姓氏消失了,它似乎对不同的输入做了不同的事情。对于字符串连接,我使用脚本:

#!/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
和字符串重新分配:

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

提供相同的输出。

您需要引用变量的用法,以防止shell执行

特别是,请尝试:

echo "$author"

考虑一下在代码中运行代码并在这里提出问题之前修复它的习惯。也请注意,如果你要给一个数组变量分配一个GLUB,那么如果你分配结果的话,你就安全得多了(<代码>文件=(“$DIR”/*)”;对于“${file(@)}”中的文件来说。;do…将在
dir
值包含空格时正常运行,而glob案例不能)。
author2=$(grep -m$count '<Author>' $i | sed 's#<Author>##' | tail -n1)
author2="-   $author2     - "
echo "$author"