【发布时间】:2020-12-13 00:37:32
【问题描述】:
文件myfile.sh 如下所示:
echo "hello"
我运行的文件是这样的:
a=$(cat myfile.sh)
echo $a
当我运行文件时,我只得到输出:
echo "hello"
而不是实际的文件内容是什么。这是怎么回事?
【问题讨论】:
文件myfile.sh 如下所示:
echo "hello"
我运行的文件是这样的:
a=$(cat myfile.sh)
echo $a
当我运行文件时,我只得到输出:
echo "hello"
而不是实际的文件内容是什么。这是怎么回事?
【问题讨论】:
http://www.gnu.org/software/bash/manual/html_node/Command-Substitution.html
在a=$(cat myfile.sh) 你的变量被赋值
命令的标准输出,所有尾随换行符被删除
这就是你多余的行的地方。
【讨论】:
来自我系统上dash (/bin/sh) 的手册页,
shell 通过在子shell 环境中执行命令并将命令替换替换为命令的标准输出来扩展命令替换,在替换结束时删除一个或多个⟨newline⟩s 的序列。(输出结束前嵌入的 ⟨newline⟩s 不会被删除;但是,在字段拆分期间,它们可能会被转换为 ⟨space⟩s,具体取决于 IFS 的值和有效的引用。)
(强调我的。)
您可以使用以下内容:
#!/bin/sh
LF='
'
a=
while read -r line; do
a="$a$line$LF"
done
printf -- '--\n%s--' "$a"
测试:
$ printf 'a b c\nd\n\n\ne\n\n\n' | ./a.sh
--
a b c
d
e
--
【讨论】: