我有一个名为的文本文件sqlfile,其中包含以下内容:
a.sql
b.sql
c.sql
d.sql
Run Code Online (Sandbox Code Playgroud)
我想要的是将它们存储在变量中然后使用for循环打印.但在这里我只得到d.sql脚本的输出.
剧本:
#!/bin/bash
while read line
do
files=`echo $line`
done < /home/abdul_old/Desktop/My_Shell_Script/sqlfile
for file in $files
do
echo $file
done
Run Code Online (Sandbox Code Playgroud)
变量只能包含一个元素,你想要的是一个数组
#!/bin/bash
while read line
do
files+=( "$line" )
done < /home/abdul_old/Desktop/My_Shell_Script/sqlfile
for file in "${files[@]}"
do
echo "$file"
done
Run Code Online (Sandbox Code Playgroud)
while read line
do files="$files $line"
done < /home/abdul_old/Desktop/My_Shell_Script/sqlfile
Run Code Online (Sandbox Code Playgroud)
要么
files=$(</home/abdul_old/Desktop/My_Shell_Script/sqlfile)
Run Code Online (Sandbox Code Playgroud)
要么
files=$(cat /home/abdul_old/Desktop/My_Shell_Script/sqlfile)
Run Code Online (Sandbox Code Playgroud)
你在循环中做了太多的工作.
中间替代方案适用bash; 另外两个适用于大多数炮弹.喜欢$(...)反引号.
此代码假定文件名中没有空格来搞砸.如果你在文件名中使用空格,你必须更加努力地工作 - 请参阅SiegeX基于阵列的解决方案