How to echo multi lined strings in a Bourne shell
本问题已经有最佳答案,请猛点这里访问。
我想创建一些脚本来填充一些模板并将它们插入到我的项目文件夹中。我想用一个shell脚本来完成这个任务,模板非常小,所以我想将它们嵌入shell脚本中。问题是,
1 2 3 4 5 6 7 8 | MY_STRING=" Hello, world! This Is A Multi lined String." echo -e $MY_STRING |
此输出:
1 | Hello, world! This Is A Multi lined String. |
我假设埃多克斯1〔0〕是这里的罪魁祸首。我如何才能确认换行?
在变量插值周围需要双引号。
1 | echo -e"$MY_STRING" |
这是一个非常常见的错误。您应该养成总是引用字符串的习惯,除非您特别需要拆分成空格分隔的标记或扩展通配符。
所以为了明确起见,shell将在解析命令行时规范化空白。如果编写一个简单的C程序,打印出它的
1 2 3 4 5 6 7 8 | argv[0]='Hello,' argv[1]='world!' argv[2]='This' argv[3]='Is' argv[4]='A' argv[5]='Multi' argv[6]='lined' argv[7]='String.' |
相比之下,与引用相比,整个字符串位于
就其价值而言,还应考虑以下文件(使用
1 2 3 4 | cat <<"HERE" foo Bar HERE |
还可以在此处文档中插入变量。
1 2 3 | cat <<HERE $MY_STRING HERE |
…尽管在这种情况下,这几乎不是你想要的。
1 2 | printf '%s '"$MY_STRING" |
没有
试试这个:
1 | echo "$MY_STRING" |