学习linux shell脚本攻略这本书中,里面有这样一段
假设我们使用子shell或反引用的方法将命令的输出保存到变量中,为了保留输出的空格和换行符(\n),必须使用双引号。
例如:
$ cat text.txt
1
2
3
$ out=$(cat text.txt)
$ echo $out
1 2 3 # 丢失了1、2、3中的\n
$ out="$(cat text.txt)"
$ echo $out
1
2
3
但我测试时发现使用双引号依然丢失换行
$ cat text.txt
1
2
3
$ out="$(cat text.txt)"
$ echo $out
1 2 3
请问这是否是bash版本的区别
bash --version
GNU bash,版本 5.0.3(1)-release (x86_64-pc-linux-gnu)
命令的输出保存到变量中保留输换行符的问题
-
- 帖子: 1
- 注册时间: 2020-07-03 4:06
- 系统: ubuntu,debian,win10
- astolia
- 论坛版主
- 帖子: 6444
- 注册时间: 2008-09-18 13:11
-
- 帖子: 2
- 注册时间: 2020-07-30 18:04
- 系统: ubuntu
Re: 命令的输出保存到变量中保留输换行符的问题
与使用的shell、或者说echo的版本确实有关,比如zsh的echo是built-in的,行为与bourne shell / bash或有不同。
关于bourne shell / bash,对于类似这样的命令行:
代码: 全选
# Try it using zsh
cat <<EOF > tmp
>1
>2
>3
>EOF
out=$(cat tmp)
echo $out
代码: 全选
prog <arg>...
- 命令行如何解析
- 命令行如何解析多个arguments?
- echo是如何把多个arguments串起来的?
- 最后,为什么使用单/双引号?