如何在一次回显中大写和替换shell脚本中的字符



我试图找到一种方法来大写和替换一个echo字符串的破折号。我没有能力使用多行来重新分配字符串值。

例如:string='test-e2e-uber'需要echo $string作为TEST_E2E_UBER

我现在可以通过使用

${string^^}大写

更换${string//-/_}

然而,当我试图组合它们时,它似乎不起作用(坏的替换错误)。是否有正确的语法来实现这一点?

echo ${string^^//-/_}

这并不能直接回答你的问题,但是下面的脚本仍然可以实现你想要的:

declare -u string='test-e2e-uber'
echo ${string//-/_}

为什么不喜欢两个连续的赋值语句呢?如果您真的不喜欢它,您将不得不恢复到一些外部程序来为您完成任务,例如

string=$(tr  a-z- A-Z_ <<<$string)

但是我认为为这样一个简单的操作创建子进程是浪费资源。

  1. 您可以直接使用'tr'命令,只需一个'echo'
echo "$string" | tr "-" "_" | tr "[:lower:]" "[:upper:]"
TEST_E2E_UBER

我不认为'tr'只允许在一个命令中转换两个对象,所以我使用管道进行输出重定向

  1. 或者你可以用'awk'
  2. 做类似的事情
echo "$string" | awk '{gsub("-","_",$0)} {print toupper($0)}'
TEST_E2E_UBER

在这种情况下,我用'gsub'替换连字符,然后我将整个记录打印为大写

最新更新