从bash脚本中的字符串中检索到的字符会根据方法的不同而变化



我正在学习shell脚本,发现了一个非常令人困惑的情况:

  1. 我使用conteudo="$(ls)"检索当前目录的所有内容
  2. 向终端发出CCD_ 2打印";data emptydirectories.sh media obb";,没关系
  3. 然后脚本必须运行echo `expr index "$conteudo" " "`,它将0打印到终端,这让我已经很困惑了,因为我希望它打印4
  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

相关内容

最新更新