【发布时间】:2017-04-25 16:19:52
【问题描述】:
我正在编写一个 ksh 脚本,该脚本将包含 @sys 子字符串的路径变量处理为其对应的操作系统名称:
如果build_type是64位版本,我们需要在osver末尾附加.64。
例如如果opsys=amd64_linux26_rh5(Red Hat Enterprise Linux 5) 和build_type=dbg64,osver 应该是amd64_linux26_rh5.64。
现在,我想将 file_path 变量中的 @sys 替换为其对应的操作系统版本作为子字符串,即 amd64_linux26_rh5.64。
但看起来 sed 正在忽略 .不知何故,唯一的 amd64_linux26_rh5 正在替换 @sys 省略 .64 部分。
#!/bin/ksh
file_path="/xxx/xxx/xxx/@sys/xxx"
sys="@sys"
bld_type="dbg64"
opsys="amd64_linux26_rh5"
bitver=".64"
if [[ ${bld_type} = @(*64) ]]
then
osver="${opsys}${bitver}"
fi
echo "osver: $osver"
echo "old file_path is : $file_path"
file_path=$(echo "$file_path" | sed "s/$sys/${osver}/")
echo "new file_path is : $file_path"
对应的输出:
osver: amd64_linux26_rh5.64
old file_path is : /xxx/xxx/xxx/amd64_linux26_rh5/xxx
new file_path is : /xxx/xxx/xxx/amd64_linux26_rh5/xxx
我们正在尝试将file_path 更改为/xxx/xxx/xxx/amd64_linux26_rh5.64/xxx。请建议在这种情况下使用sed 的适当方式。
【问题讨论】:
-
我得到了不同的输出。
-
@choroba,你能分享一下输出吗?
-
osver: amd64_linux26_rh5.64\nold file_path is : /xxx/xxx/xxx/@sys/xxx\nnew file_path is : /xxx/xxx/xxx/amd64_linux26_rh5.64/xxx. -
@choroba,我认为它是
parameter interpolationofksh。 -
我复制了包含shebang行的脚本,所以这里也是ksh。