我想从MySQL输出的输出中运行while循环,但我的输出被切断了。
我从MySQL获得的示例输出是:
123 nfs://192.168.1.100/full/Some.file.1.txt
124 nfs://192.168.1.100/full/A second file 2.txt
我的循环看起来像这样:
mysql -uuser -ppass queue -ss -e 'select id,path from queue where status = 0' | while read a b c
do
echo $a
echo $b
done
$ {b}的结果在nfs://192.168.1.100/full/A
之后被切断。
我如何输出整个句子?
答案 0 :(得分:2)
您的第二个文件名包含空格,因此这是字段被截断的位置。 由于它是输出的最后一个字段,因此您可以跳过字段c:
mysql -uuser -ppass queue -ss -e 'select id,path from queue where status = 0' | while read a b
do
echo $a
echo $b
done
读取的最后一个字段将包含所有剩余字段。
答案 1 :(得分:1)
问题是您使用以下方法将每行读入3个变量:
read a b c
因为你的输入行也包含一个空格,例如
124 nfs://192.168.1.100/full/A second file 2.txt
使用默认IFS
,它将3个变量设置为:
a=124
b=nfs://192.168.1.100/full/A
c=second file 2.txt
由于c
是read
中的最后一个参数,因此它会在c
中读取其余部分。
要修复脚本,您可以这样做:
read a b