小编con*_*ion的帖子

TCL:如何删除字符串中的所有字母/数字?

我正在使用 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)

有人可以解释为什么吗?

string tcl

2
推荐指数
1
解决办法
975
查看次数

[ -r $1 ] 和 [ ! -r $1 ] 在 Bash 中是什么意思?

我了解到 -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 究竟做了什么?

bash

1
推荐指数
1
解决办法
2569
查看次数

标签 统计

bash ×1

string ×1

tcl ×1