替换 Bash 变量中的字符
replace characters in Bash variable
我正在尝试用特定变量中的 _
个字符替换所有 -
个字符。尝试使用 tr
函数。我错过了什么?
谢谢!
user@mbp-user ~ % echo $APP_ID
app1_someinfo_info-text_text-indfo_text
user@mbp-user ~ % APP_ID= $APP_ID tr - _
zsh: command not found: app1_someinfo_info-text_text-indfo_text
user@mbp-user ~ % APP_ID= $APP_ID tr "-" "_"
zsh: command not found: app1_someinfo_info-text_text-indfo_text
user@mbp-user ~ %
尝试以下操作:
[user@host ~]$ APP_ID="app1_someinfo_info-text_text-indfo_text"
[user@host ~]$ APP_ID=$(echo $APP_ID | tr "-" "_")
[user@host ~]$ echo $APP_ID
app1_someinfo_info_text_text_indfo_text
尝试如下
echo $APP_ID | tr -- - _
为防止以 -
开头的参数被解释为可选参数,请使用 --
指示可选参数的结尾。
后记
但这没关系。 tr - _
按预期工作。问题是您没有为 tr
.
的标准输入提供字符串
使用sed
$ sed 's/-/_/g' <<< "$APP_ID"
app1_someinfo_info_text_text_indfo_text
纯粹bash
$ APP_ID=${APP_ID//-/_}
$ echo $APP_ID
app1_someinfo_info_text_text_indfo_text
使用awk
$ awk '{gsub(/-/,"_")}1' <<< "$APP_ID"
app1_someinfo_info_text_text_indfo_text
您可以在纯 bash 中执行此操作,而无需调用任何其他进程。
$ APP_ID=app1_someinfo_info-text_text-indfo_text
$ echo $APP_ID
app1_someinfo_info-text_text-indfo_text
$ echo ${APP_ID//-/_}
app1_someinfo_info_text_text_indfo_text
或重新分配给同一个变量
$ APP_ID=${APP_ID//-/_}
具体来说,我们正在使用模式
name//pattern/string
将变量 name
.
中所有出现的 pattern
替换为 string
有关详细信息,请参阅 Carl Albing Bash Cookbook 的第 5.18 节。
我正在尝试用特定变量中的 _
个字符替换所有 -
个字符。尝试使用 tr
函数。我错过了什么?
谢谢!
user@mbp-user ~ % echo $APP_ID
app1_someinfo_info-text_text-indfo_text
user@mbp-user ~ % APP_ID= $APP_ID tr - _
zsh: command not found: app1_someinfo_info-text_text-indfo_text
user@mbp-user ~ % APP_ID= $APP_ID tr "-" "_"
zsh: command not found: app1_someinfo_info-text_text-indfo_text
user@mbp-user ~ %
尝试以下操作:
[user@host ~]$ APP_ID="app1_someinfo_info-text_text-indfo_text"
[user@host ~]$ APP_ID=$(echo $APP_ID | tr "-" "_")
[user@host ~]$ echo $APP_ID
app1_someinfo_info_text_text_indfo_text
尝试如下
echo $APP_ID | tr -- - _
为防止以 -
开头的参数被解释为可选参数,请使用 --
指示可选参数的结尾。
后记
但这没关系。 tr - _
按预期工作。问题是您没有为 tr
.
使用sed
$ sed 's/-/_/g' <<< "$APP_ID"
app1_someinfo_info_text_text_indfo_text
纯粹bash
$ APP_ID=${APP_ID//-/_}
$ echo $APP_ID
app1_someinfo_info_text_text_indfo_text
使用awk
$ awk '{gsub(/-/,"_")}1' <<< "$APP_ID"
app1_someinfo_info_text_text_indfo_text
您可以在纯 bash 中执行此操作,而无需调用任何其他进程。
$ APP_ID=app1_someinfo_info-text_text-indfo_text
$ echo $APP_ID
app1_someinfo_info-text_text-indfo_text
$ echo ${APP_ID//-/_}
app1_someinfo_info_text_text_indfo_text
或重新分配给同一个变量
$ APP_ID=${APP_ID//-/_}
具体来说,我们正在使用模式
name//pattern/string
将变量 name
.
pattern
替换为 string
有关详细信息,请参阅 Carl Albing Bash Cookbook 的第 5.18 节。