我能够根据文件的名称创建目录。如果文本中有空格或非字母数字字符,我就会遇到麻烦。我想删除那些非字母数字字符,并将剩余的字符转换为小写。这将生成目录的名称。我尝试运行了一些测试,但我甚至无法删除空格。
另外我可以限制为 25 个字符吗?
__FILE_NAME="Test File@#!!.txt"
echo ${__FILE_NAME// /_}
$ echo $__FILE_NAME | tr '[:upper:]' '[:lower:]'
mkdir -p $__PATH${__FILE_NAME};
答案1
使用bash
:
f="Test File@#!!.txt"
f="${f// /_}"
f="${f//[^[:alnum:].]/}"
f="${f,,?}"
mkdir -p "$__PATH$f"
解释:
f="${f// /_}"
这会将所有空格替换为下划线。此处是否使用双引号是可选的。不过,除非您精通 shell 的许多特殊情况,否则最好在变量使用的所有地方都加上双引号。
f="${f//[^[:alnum:].]/}"
这使用 bash 的另一个参数扩展来删除除句点之外的所有非字母数字字符。(我猜你可能想保留它们。)
如果您还想删除句点,请将此行替换为:
`f="${f//[^[:alnum:]]/}"`
f="${f,,?}"
tr
是将大写字母转换为小写字母的传统工具。此行改用 bash 的内置参数扩展之一来进行转换。mkdir -p "$__PATH$f"
除非有人希望 shell 处理 shell 变量,否则将它们放在双引号中会更安全。