Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/string/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String Bash脚本文件读取,Bash删除空格_String_Bash_File - Fatal编程技术网

String Bash脚本文件读取,Bash删除空格

String Bash脚本文件读取,Bash删除空格,string,bash,file,String,Bash,File,这个问题是我之前关于读取文件中某些行的问题的后续问题。 我阅读我的文件如下: while read line do if [ "$line" == "SUMMARY OF POLARIZATION CALCULATION" ]; then for i in {1..9} do read line echo $line >> ../../Summary.out done

这个问题是我之前关于读取文件中某些行的问题的后续问题。 我阅读我的文件如下:

while read line 
do
    if [ "$line" == "SUMMARY OF POLARIZATION CALCULATION" ]; then
        for i in {1..9}
        do
            read line
            echo $line >> ../../Summary.out
        done
        break
    fi
done < ../Tutorial1_1.out
因此,上面的代码只取“SUMMARY..”后面的9行,并写入SUMMARY.out文件。但是,当它写入时,它会将所有间距都拧紧,因此我得到以下结果:

=======================================================================================
Value | spin | dir(1) | dir(2) | dir(3)
---------------------------------------------------------------------------------------
Electronic polarization (C/m2) sp(1) [-8.783054e-12, -8.828765e-13, 4.803326e-01]
Ionic polarization (C/m2) sp(1) [ 1.365657e-11, 1.365657e-11, -1.760570e-01]
Tot. spin polariz.=Pion+Pel (C/m2) sp(1) [ 4.873517e-12, 1.277369e-11, 3.042756e-01]
---------------------------------------------------------------------------------------
TOTAL POLARIZATION (C/m2) both [ 4.873517e-12, 1.277369e-11, 3.042756e-01]
=======================================================================================
我如何解决这个问题,是否有一个标志可以准确地读写输入文件中的字符串?

我建议使用

echo "$line" >> ../../Summary.out
而不是

echo $line >> ../../Summary.out
我建议使用

echo "$line" >> ../../Summary.out
而不是

echo $line >> ../../Summary.out

告诉我我是否理解正确。如果不使用“”,字符串变量将被视为一个数组,其中只打印非空元素,而使用“”,则将其视为一个字符串?最好不要将其视为一个数组(因为
bash
也有数组)。相反,请将
$line
视为一个宏。字符串
$line
被变量
line
的内容替换,就像
echo a b
将简单地打印
a b
(多个空格替换为一个空格),因此
echo$line
$line
中的任何空格视为简单的字段分隔符,每个字段之间都有一个空格。但是,为了保留前导空格和尾随空格,您需要使用
IFS=read
,而不仅仅是
read
,以及引用
$line
的扩展。区别在于shell将参数传递给
echo
命令的方式。在
$line
周围不使用引号时,将对该变量求值,并将结果作为一个或多个参数传递给
echo
。当您引用变量时,它将被计算,结果将作为单个参数传递给
echo
。因此,当您执行
$line='abc';echo$line
echo命令将获得3个参数。但是,如果您在
$line
周围添加引号,那么echo将只得到一个参数(并保留空格)。请告诉我我是否理解正确。如果不使用“”,字符串变量将被视为一个数组,其中只打印非空元素,而使用“”,则将其视为一个字符串?最好不要将其视为一个数组(因为
bash
也有数组)。相反,请将
$line
视为一个宏。字符串
$line
被变量
line
的内容替换,就像
echo a b
将简单地打印
a b
(多个空格替换为一个空格),因此
echo$line
$line
中的任何空格视为简单的字段分隔符,每个字段之间都有一个空格。但是,为了保留前导空格和尾随空格,您需要使用
IFS=read
,而不仅仅是
read
,以及引用
$line
的扩展。区别在于shell将参数传递给
echo
命令的方式。在
$line
周围不使用引号时,将对该变量求值,并将结果作为一个或多个参数传递给
echo
。当您引用变量时,它将被计算,结果将作为单个参数传递给
echo
。因此,当您执行
$line='abc';echo$line
echo命令将获得3个参数。但如果在
$line
周围添加引号,则echo将只获得一个参数(并保留空格)。