我正在使用 tcl 编程语言并尝试从字符串中删除所有字母或数字。从这个例子中,我知道从字符串(例如set s abcdefg0123456)中删除所有字母的一般方法是
set new_s [string trim $s "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXXYZ"]
Run Code Online (Sandbox Code Playgroud)
如果我想从字符串中删除所有数字,我可以这样做
set new_s [string trim $s "0123456789"]
Run Code Online (Sandbox Code Playgroud)
有没有更直接的方法来删除所有字母/数字?
我还注意到,如果我想删除一部分数字(例如 012)而不是所有数字,则以下操作不起作用。
set new_s [string trim $s "012"]
Run Code Online (Sandbox Code Playgroud)
有人可以解释为什么吗?
我了解到 -r 表示递归,这意味着该命令可以在所有子目录中执行。为了确保我理解,我写了下面的两个函数来进行一些测试。我编写以下代码的文件名为 test.sh。在同一个目录中,我有一个名为 subtest 的子目录。在当前目录或子目录中有一个名为 xx.sh 的文件。
#!/bin/bash
function aa {
if [ ! -r $1 ]
then
echo "not exist"
else
echo "exist"
fi
}
function bb {
if [ -r $1 ]
then
echo "exist"
else
echo "not exist"
fi
}
aa xx.sh / bb xx.sh
Run Code Online (Sandbox Code Playgroud)
我发现的结果:
对于 aa 函数,-r如果 xx.sh 在当前目录中,它只会打印“exist”。它不会在子目录中查找 xx.sh。没有-r,当 xx.sh 在当前目录或子目录中时,它将打印“存在”。
对于 bb 函数,使用-r,它只会在当前目录有 xx.sh 时打印“exist”。没有-r,它总是会打印“存在”,即使根本没有 xx.sh (这让我感到惊讶并且没有意义!)。
谁能解释为什么会发生上述结果以及 -r 究竟做了什么?