【发布时间】:2015-06-05 09:04:54
【问题描述】:
以下是echo $var 可以显示与刚刚分配的值不同的值的一系列情况。无论分配的值是“双引号”、“单引号”还是未引号,都会发生这种情况。
如何让 shell 正确设置我的变量?
星号
预期的输出是/* Foobar is free software */,但我得到的是文件名列表:
$ var="/* Foobar is free software */"
$ echo $var
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...
方括号
预期值为[a-z],但有时我得到一个字母!
$ var=[a-z]
$ echo $var
c
换行符(换行符)
预期值是一个单独行的列表,但所有值都在一行上!
$ cat file
foo
bar
baz
$ var=$(cat file)
$ echo $var
foo bar baz
多个空格
我期望一个仔细对齐的表格标题,但多个空格要么消失,要么折叠成一个!
$ var=" title | count"
$ echo $var
title | count
标签
我希望有两个制表符分隔的值,但我得到了两个空格分隔的值!
$ var=$'key\tvalue'
$ echo $var
key value
【问题讨论】:
-
感谢您这样做。我经常遇到换行符。所以
var=$(cat file)很好,但是echo "$var"是必需的。 -
顺便说一句,这也是 BashPitfalls #14:mywiki.wooledge.org/BashPitfalls#echo_.24foo