我正在学习shell脚本,发现了一个非常令人困惑的情况:
- 我使用
conteudo="$(ls)"
检索当前目录的所有内容 - 向终端发出CCD_ 2打印";data emptydirectories.sh media obb";,没关系
- 然后脚本必须运行
echo `expr index "$conteudo" " "`
,它将0打印到终端,这让我已经很困惑了,因为我希望它打印4 - 最后一个命令是
echo ${conteudo:0:1}
;d";在终端(小丑脸(
我想了解为什么角色在这两种情况下会发生变化。我最初认为引号干扰了字符串的处理方式,但没有发现任何相关信息,更改引号的使用要么无效,要么返回错误。
屏幕上显示的输出"data emptydirectories.sh media obb"
实际上没有用空格分隔,这些文件名用新行分隔。如果您执行echo "$conteudo"
,您将看到真实的输出。将这些新行转换为空格的一个简单方法是将其分配给另一个变量aaa=$(echo $conteudo)
,然后您就会得到预期的结果。
$ conteudo="$(ls)"
$ echo $conteudo
access.log g_access_log.loh result.lst sublogs thislog.2020-02-25T10.28.01.956-f4b54c
$ echo "$conteudo"
access.log
g_access_log.loh
result.lst
sublogs
thislog.2020-02-25T10.28.01.956-f4b54c
$ conteudo=$(echo $conteudo)
$ echo "$conteudo"
access.log g_access_log.loh result.lst sublogs thislog.2020-02-25T10.28.01.956-f4b54c
$ echo `expr index "$conteudo" " "`
11
$ echo ${conteudo:0:1}
a