我写了一个BASH文件,其中包含表单的多个嵌入式循环
for P in {'0.10','0.20', [...] '0.90','1.00'}; do
for Q in {'0.10','0.20', [...] ,'0.90','1.00'}; do
[...]
Run Code Online (Sandbox Code Playgroud)
我将这些变量用作命令行应用程序的参数,并直接在BASH中创建文件名.我想创建重复项,比如$P_REP=0_10
用一个下划线替换点而不为每个case写一个显式的switch语句,或者一些硬编码的等价物.我找到的(非优雅的方式)就是为了
P,Q
到临时文件.sed 's/./_/ -i
.因此,我想知道是否可以直接在变量的内容上运行sed like命令?
Joh*_*ica 18
你可以直接在bash中进行模式替换:
P_REP=${P/./_}
Q_REP=${Q/./_}
Run Code Online (Sandbox Code Playgroud)
从bash(1)手册页:
参数扩展
${parameter/pattern/string}
模式替换. 的 图案被膨胀,以产生一个模式,就像在路径扩展. 扩展参数,并将模式与其值的最长匹配替换为字符串.如果模式开头
/
,所有的比赛模式被替换为的字符串.通常只替换第一场比赛.如果pattern以#
,它必须在参数的扩展值的开头匹配.如果pattern以%
,它必须在参数的扩展值的末尾匹配.如果是字符串如果为null,则删除模式的匹配,并且可以省略/ following 模式.如果参数是@
或*
,则替换操作依次应用于每个位置参数,并且扩展是结果列表.如果parameter是一个用@
或者下标的数组变量*
,则替换操作依次应用于数组的每个成员,并且扩展是结果列表.
Zer*_*eus 11
John Kugelman的答案适用于您的示例,但如果您需要使用实际的sed程序(或其他任意命令)处理变量的内容,您可以这样做:
P_REP=$(sed 's/\./_/' <<< "$P")
Run Code Online (Sandbox Code Playgroud)