Bash脚本没有扩展我的$ file变量吗?

时间:2019-10-04 13:52:09

标签: linux bash shell

elif语句从字面上打印字符串$file而不是变量的值。我该如何解决?

  while read file
    do
    file_time=$(du -s --time "$directory/$file" | cut -f2)
    if [ -d "$directory/$file" ]; then
      if [ "$directory" == "." ]; then
        content+="<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]" width="16" height="16" /></td><td><a href=\"$root_directory/$file/index.html\">$file</a></td><td align="right">$file_time  </td><td align="right">  - </td><td>&nbsp;</td></tr>"
      else
        content+="<tr><td valign="top"><img src="/icons/folder.gif" alt="[DIR]" width="16" height="16" /></td><td><a href=\"$root_directory/$directory/$file/index.html\">$file</a></td></td><td align="right">$file_time  </td><td align="right">  - <td>&nbsp;</td></tr>"
      fi
    elif [ -f "$directory/$file" ]; then
      file_size=$(du -h "$directory/$file" | cut -f1)
      if [ "$directory" == "." ]; then
        content+="<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]" width="16" height="16" /></td><td><a href=\"$root_directory/$file/index.html\">$file</a></td><td align="right">$file_time  </td><td align="right"> $file_size </td><td>&nbsp;</td></tr>"
      else
        content+='<tr><td valign="top"><img src="/icons/unknown.gif" alt="[   ]" width="16" height="16" /></td><td><a href=\"$root_directory/$directory/$file\">$file</a></td><td align="right">$file_time  </td><td align="right"> $file_size </td><td>&nbsp;</td></tr>'
     fi  
    fi

 done < <(ls -1 --group-directories-first $directory --ignore=index.html --ignore=icons --ignore=pictures --ignore=make_index.sh --ignore=good.sh)

1 个答案:

答案 0 :(得分:1)

void

比较两行中的语法高亮显示。在第一个中,混合了红色和黑色文本。第二个全是红色。为什么?您使用的引号不同:一个以if [ "$directory" == "." ]; then content+="<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]" width="16" height="16" /></td><td><a href=\"$root_directory/$file/index.html\">$file</a></td><td align="right">$file_time </td><td align="right"> $file_size </td><td>&nbsp;</td></tr>" else content+='<tr><td valign="top"><img src="/icons/unknown.gif" alt="[ ]" width="16" height="16" /></td><td><a href=\"$root_directory/$directory/$file\">$file</a></td><td align="right">$file_time </td><td align="right"> $file_size </td><td>&nbsp;</td></tr>' fi 开头,另一个以"开头。

  • 变量不会用单引号引起来,所以我不建议使用'。您想扩展',而不是单引号。

  • 双引号版本允许$file进行扩展。但是,嵌入的双引号是一个问题。正如语法高亮显示的那样,您实际上并不是嵌入引号。相反,您反复地在双引号部分开始和结束。

将单引号切换为双引号,然后使用$file对所有嵌入的引号进行转义。这样可以解决红色/黑色语法突出显示的问题。

\"

或在HTML中使用单引号。然后,您不需要任何难看的反斜杠。 HTML允许使用两种引号。

if [ "$directory" == "." ]; then
  content+="<tr><td valign=\"top\"><img src=\"/icons/unknown.gif\" alt=\"[   ]\" width=\"16\" height=\"16\" /></td><td><a href=\"$root_directory/$file/index.html\">$file</a></td><td align=\"right\">$file_time  </td><td align=\"right\"> $file_size </td><td>&nbsp;</td></tr>"
else
  content+="<tr><td valign=\"top\"><img src=\"/icons/unknown.gif\" alt=\"[   ]\" width=\"16\" height=\"16\" /></td><td><a href=\"$root_directory/$directory/$file\">$file</a></td><td align=\"right\">$file_time  </td><td align=\"right\"> $file_size </td><td>&nbsp;</td></tr>"
fi  

如果无条件地添加HTML的通用位,整个内容将更容易阅读。

if [ "$directory" == "." ]; then
  content+="<tr><td valign='top'><img src='/icons/unknown.gif' alt='[   ]' width='16' height='16' /></td><td><a href='$root_directory/$file/index.html'>$file</a></td><td align='right'>$file_time  </td><td align='right'> $file_size </td><td>&nbsp;</td></tr>"
else
  content+="<tr><td valign='top'><img src='/icons/unknown.gif' alt='[   ]' width='16' height='16' /></td><td><a href='$root_directory/$directory/$file'>$file</a></td><td align='right'>$file_time  </td><td align='right'> $file_size </td><td>&nbsp;</td></tr>"
fi