我正在使用bash
外壳。如果我只是用vi
编辑器打开一个文件并关闭它甚至一次都没有移动光标,那么据我所知,应该更改文件的最后访问时间,因为它已被编辑器打开。
但是当我用文件进行试验时,这并没有发生。在这种情况下,最后访问时间保持不变。我误解了什么吗?
请更清楚地阐明上次访问时间的概念,并解释vi
编辑器如何能够在不修改此时间戳的情况下访问文件。
在 shell 脚本程序中,如果转换后的文件名不存在,我需要将文件名转换为大写。在这种特殊情况下,我只需要将基本名称更改为大写,将扩展名(如果有)保持原样。
我做这个问题的想法是首先分别提取基名和扩展名,使用tr
命令将基名转换为大写
,然后检查目录中是否存在更改的基名和扩展名。
如果它不存在,那么我将使用 mv 用大写的基本名称更改原始文件名。现在我认为这可以通过两种方式完成:首先使用expr
,其次使用cut
with .
(space-period-space) 作为分隔符。
如果我想expr
用于提取基本名称(例如,从文件名 -python1.py
或phonelist
),那么我写了这个:
basefile=`expr "$filename" : '\(.*\)\.*.*' `
Run Code Online (Sandbox Code Playgroud)
我也使用\.*
了那些没有任何扩展名的文件名,因为\.*
会忽略零次或多次出现的.
,但是这个表达式expr
不能正常工作。对于任何文件名,它都按原样返回整个文件名。
任何人都可以请解释我错在哪里。另外请建议我如何使用expr
仅从文件名中提取扩展名。