无法从字符串中删除冒号

问题描述 投票:0回答:2

我正在 bash 中编写一个快速脚本,一开始我设置

IFS=$'\n'
.在我有一个 for 循环之后:

for i in *;
do
    j=${i//:/}
done

无论我做什么,冒号都不会从

$i
中删除。我尝试了所有我能想到的方法来从字符串中删除字符,包括
sed
tr
等等。我什至尝试在冒号前使用反斜杠,或在 for 循环中重置 IFS。

奇怪的是我可以替换其他字符,只是冒号对我不起作用。

我该怎么办?

bash sed tr
2个回答
0
投票

我不明白 IFS 与字符串中的冒号有什么关系,但

$(echo $i | sed 's/://')
应该可以用空格替换冒号。


0
投票
  • ${string/substring/replacement}
    是 Bash 字符串扩展语法,在这种情况下是正确的。
  • IFS='\n'
    将内部字段分隔符(即单词边界)设置为换行符,因此 bash 可以读取字符串中的转义序列(换行符)。默认为空格、制表符和换行符。

您正在尝试读取当前目录中的所有文件名,如果有则删除冒号。上面的 shell 脚本在我的电脑(Ubuntu 22.04,Bash 版本 5.1.16)中运行良好:

❯ ls
fi:le1.txt  file:2.txt  file:multiple:3.jpg  remove_colon.sh
❯ cat remove_colon.sh
#!/bin/bash

IFS=$'\n'

for i in *;
do
  j=${i//:/}
  echo "$j"
done
❯ ./remove_colon.sh
file1.txt
file2.txt
filemultiple3.jpg
remove_colon.sh
© www.soinside.com 2019 - 2024. All rights reserved.