如何在 Bash 脚本中将反斜杠替换为空

How to replace back-slash with nothing in Bash script

在 bash 脚本中,我想以 YYYY\mm\dd.

的格式获取当前日期

然后我想删除反斜杠 \ 并将结果存储在变量中,FOO

我的密码是

FOO=$($(date +'%Y\%m\%d')//\/)
echo "$FOO"

//\/ 的字面意思是

  1. // 替换每个
  2. \ 反斜杠
  3. /

但是,我得到了错误

2019/\/: No such file or directory

我这里做错了什么?

该脚本有两个嵌套的“$(”构造。一个应该完成工作。第二个应该是 ${} 以删除不需要的 \

YMD=$(date +'%Y\%m\%d')
FOO=${YMD//\/}
echo "$FOO"

当格式化日期被外部“$(”强制作为命令时会触发错误消息。还要注意 ${} 不能像 $() 那样嵌套,它们需要一个变量名字.

附带问题 - 为什么在不需要时添加 \

${var//\/}使用{}大括号,是variable expansion,需要变量展开

您可以:

FOO=$(date +'%Y\%m\%d')
FOO=${FOO//\/}

参数扩展不嵌套;您需要将它们作为单独的步骤进行。

foo=$(date +'%Y\%m\%d')
foo=${foo//'\'/}
echo "$foo"

注意小写变量名的使用 -- 这是根据 POSIX-defined convention,它指定用于对 shell 或操作系统有意义的变量的全大写名称,并保留其他应用程序使用的名称。