【问题标题】:How to pass a variable space character in tr command如何在 tr 命令中传递可变空格字符
【发布时间】:2015-06-04 12:44:29
【问题描述】:

在 shell 脚本中,我想在使用 tr 但收到错误的函数中用空格替换所有下划线字符,因为我不知道将变量中的空格传递给 tr

function sanitizeDirName() {
  local name=$1
  local f=$2
  local r=$3
  echo ${name##*/} | grep -E -o $re | tr $f $r 
}

sanitizeDirName "~/test_1" "_" " "

谢谢

【问题讨论】:

  • echo ${name##*/} | grep -E -o "$re" | tr "$f" "$r"

标签: bash shell unix replace


【解决方案1】:

您需要引用您的变量,因为它们是从用户输入中填充的,并且可能包含空格或元字符(如 cmets 中的三元组所指出的那样):

echo ${name##*/} | grep -E -o "$re" | tr "$f" "$r"

如果您想删除_,那么您可能需要使用-d 标志

echo ${name##*/} | grep -E -o $re | tr -d $f

【讨论】:

  • 谢谢 :-) 如果我想替换 _ 怎么办?像这个 sanitizeDirName "~/test_1" "_" "" 如果我​​尝试我会收到这个错误:tr: empty string2
  • 其实你应该在里面引用everything。如果$name 包含任何shell 元字符或不规则空格,则不加引号地回显它会改变它。如果正则表达式包含任何 shell 元字符或空格,grep' will not work correctly. If $f` 包含任何 shell 元字符或空格,tr 命令将无法正常工作。
  • 是的,因为我们正在处理用户输入,你是对的。我只是强调了问题是他的代码。不过我会更新我的答案。
猜你喜欢
  • 2022-12-20
  • 1970-01-01
  • 2014-10-03
  • 2019-06-24
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 2013-10-21
  • 2013-10-23
相关资源
最近更新 更多