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:stringabüßa
应该如何翻译?或者包含法语双音æ的字符串?您应该引用变量引用(“$string”
,而不仅仅是$string
)和[…]
参数,以避免意外的解析/通配符扩展。
echo "$string" | tr "-" "_" | tr "[:lower:]" "[:upper:]"
TEST_E2E_UBER
echo "$string" | awk '{gsub("-","_",$0)} {print toupper($0)}'
TEST_E2E_UBER