我的nextermCensus.lis
包含换行符,我只对第一行感兴趣,我想删除换行符。但它不起作用。所以我必须使用第二种方法来删除它。 $(echo $census_day | tr -d '\n')
按我的预期工作。但我真的很喜欢用一行来做。
census_day=`head -1 /dr4/home/operbat/batches/nextermCensus.lis | tr -d '\n'`
census_day=$(echo $census_day | tr -d '\n')
答案1
命令:
bla=`head -1 filename`
已经删除了换行符。该echo
命令再次附加换行符。
尝试:
echo "$bla\c"
(如果您使用的是 POSIX 兼容的 echo),您将看到$bla
.
答案2
默认情况下,echo
将在被告知要打印的任何字符串或变量中添加尾随换行符。您的第一个命令完美运行,那里没有换行符,命令替换(`...`
或其现代等效命令$(...)
)会去除每个尾随换行符。仅当您尝试使用该变量时才会添加它echo
。
例如,给定这个文件:
$ cat foo.txt
a
b
c
我可以保存第一行,不包括换行符,只需使用head
:
$ census_day=`head -n 1 foo.txt`
现在,如果您要这样做echo
,您会看到换行符,但如果您要使用printf
, 或echo -n
(对于echo
支持它的 s),您将不会:
$ printf %s "$census_day" | od -tc
0000000 a
0000001