String 如何在一个echo中大写和替换shell脚本中的字符

String 如何在一个echo中大写和替换shell脚本中的字符,string,bash,shell,replace,uppercase,String,Bash,Shell,Replace,Uppercase,我试图找到一种方法,在一个回音中大写并替换字符串的破折号。我无法使用多行来重新分配字符串值 例如: string='test-e2e-uber'需要echo$stringastest\e2e\u uber 我目前可以利用 ${string^^}用于大写 ${string/-/}用于替换 然而,当我尝试组合它们时,它似乎不起作用(错误的替换错误)。 是否有正确的语法来实现这一点 echo${string^^/-/-/}这并不能直接回答您的问题,但下面的脚本仍然满足了您的要求: declare -u

我试图找到一种方法,在一个回音中大写并替换字符串的破折号。我无法使用多行来重新分配字符串值

例如:
string='test-e2e-uber'
需要
echo$string
astest\e2e\u uber

我目前可以利用

${string^^}
用于大写

${string/-/}
用于替换

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


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

这并不能直接回答您的问题,但下面的脚本仍然满足了您的要求:

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

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

string=$(tr  a-z- A-Z_ <<<$string)
string=$(tr a-z-a-z_
  • 您可以直接使用“tr”命令,只需一个“echo”
  • 我不认为'tr'只允许在一个命令中转换两个对象,所以我使用管道进行输出重定向

  • 或者你可以用“awk”做类似的事情

  • 在本例中,我将用“gsub”替换连字符,然后我将整个记录打印为大写

    我看到过关于同时进行两次替换的问题,答案是不,这是不可能的。因此,我担心
    ^
    /…
    的组合也不起作用。只需用中间的ass分两步进行即可您可以考虑两个步骤:<代码>字符串= ${Stry^ ^ };String=${Stry//-/}} /Cube。如果管道通过<代码> TR 是一个选项,您可以使用<代码>回声“$string”Tr’[:下::'-'(::上:)]。_“
    @Balry:string
    abüßa
    应该如何翻译?或者包含法语双音æ的字符串?您应该引用变量引用(
    “$string”
    ,而不仅仅是
    $string
    )和
    […]
    参数,以避免意外的解析/通配符扩展。
    echo "$string" | tr "-" "_" | tr "[:lower:]" "[:upper:]"
    TEST_E2E_UBER
    
    echo "$string" | awk '{gsub("-","_",$0)} {print toupper($0)}'
    TEST_E2E_UBER