我想以这种方式打印我从Array拆分中获得的内容:
string="abc test;ABCtest.it"
IFS=';' read -a array <<< "$string"
name="${array[0]}"
url="${array[1]}"
echo -ne "\n$url,$name" >> "$outputDir/$fileName"
Run Code Online (Sandbox Code Playgroud)
但输出文件不包含url部分
我认为问题是"." 但我不知道如何解决它
如果我试试这个
echo $url
Run Code Online (Sandbox Code Playgroud)
这是工作!
谢谢
我也试过printf和硬编码的文件名,但没有!
printf '%s %s\n' "$url" "$name" >> test.txt
Run Code Online (Sandbox Code Playgroud)
似乎当我尝试在变量$ url之后连接另一个东西时,变量的某些部分被删除或覆盖到输出文件中
例如,如果我尝试这个
printf '%s %s\n' "$url" "pp" >> test.txt
Run Code Online (Sandbox Code Playgroud)
我用简单的cat test.txt得到的是:
pptest.it
Run Code Online (Sandbox Code Playgroud)
但变量$ url的内容必须是ABCTest.it
这很奇怪
补充chepner的有用答案:
如果输出不看你希望它是什么样子,它总是值得研究的内容,寻找隐藏的控制字符可能会改变数据的外观上输出.
\r,CR(回车; ASCII值13)是一个臭名昭着的例子,原因有两个:
echo $'abcd\refg'打印efgd:\r导致所有内容在行开始时重新开始打印,只有幸存之前的d字符串,因为它恰好是 1个字符.比来弦长之后.
(注意:语法是所谓的ANSI C引用字符串,它允许使用转义序列,例如in 来创建实际的控制字符.)\r$'...'\r$'...\r...'\r字符的文件.当与Windows世界接口时经常发生,其中换行符不仅仅是\n字符串,而是\r\n序列,而且这些文件在Unix世界中表现得很奇怪.cat -et一种简单方法是将数据管道化,将控件字符突出显示为^<char>序列:
^M代表一个\r(CR)^I代表一个\t(tab.cos)^[ 代表ESC char.... # see 'man cat'$^M$在输出行的末尾cat -et.cat -et 应用于上面的示例产生以下内容,这使得诊断问题变得容易:
echo $'abcd\refg' | cat -et # -> 'abcd^Mefg$' - note the ^Mdos2unix是用于将Windows样式的行结尾(\r\n)转换为Unix的(\r\n)的工具,但是这个工具并没有预先安装在大多数类Unix平台上,并且很容易使用标准的POSIX实用程序来执行这样的转换:
awk 'sub("\r$", "")+1' win.txt > unix.txtsed,下面将进行转换到位:
sed -i 's/\r$//' winIn_UnixOut.txt sed(也用在OSX),从bash,ksh或zsh:
sed -i '' $'s/\r$//' winIn_UnixOut.txt| 归档时间: |
|
| 查看次数: |
2183 次 |
| 最近记录: |