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