我试图找到一种方法来大写和替换一个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)
但是我认为为这样一个简单的操作创建子进程是浪费资源。
- 您可以直接使用'tr'命令,只需一个'echo'
echo "$string" | tr "-" "_" | tr "[:lower:]" "[:upper:]"
TEST_E2E_UBER
我不认为'tr'只允许在一个命令中转换两个对象,所以我使用管道进行输出重定向
- 或者你可以用'awk' 做类似的事情
echo "$string" | awk '{gsub("-","_",$0)} {print toupper($0)}'
TEST_E2E_UBER
在这种情况下,我用'gsub'替换连字符,然后我将整个记录打印为大写