【发布时间】:2014-05-16 17:20:02
【问题描述】:
我有一个脚本需要在(主要)3 环境(AIX、Linux [Red hat]、sun [由于迁移几乎不再存在])下运行,但始终在 ksh(不是 ksh93)下运行
我尝试将值分配给可在 3 环境中工作的变量,尤其是像 wc -l 或 sed/awk 之类的操作,...
由于规范和外壳解释,我找不到通用代码。我可以使用if 命令来使用基于操作系统的特定版本的分配代码,但代码需要被每个shell 理解
带有数组声明的问题示例(和评估解决方案)
if ${HostLinux}
then
eval 'typeset -a aModeTrace=( [0]=false [1]=false [2]=false [3]=false )'
else
eval 'set -A aModeTrace false false false false'
fi
现在我有一个要 sed 并分配给变量的字符串 aix 代码使用
ThisLine="have a \" and a ' or maybe a \\; and many more other char like any log file could have"
cst_PrintfPipeOS="
"
SampleSize=24
printf '%s%s' "${ThisLine}" "${cst_PrintfPipeOS}" | sed -e "s/^\(.\{${SampleSize}\}\).*/\1/" | read Result
为简单起见,我可以使用 3 var HostLinux、HostSun 和 HostAix 设置为真/假,具体取决于运行环境(您可以想象,只有 1 个为真)
1) 如何处理等价的|在 linux 中读取代码不会在 AIX/SUN 上挂起的代码(类似 read Result <<< 的代码在 AIX 上挂起)
2)使用 Result="some code" 取决于 " 和 ' 内容和变量周围的报价
我尽量避免在每一行赋值eval(有超过 1500 行,想象一下代码和注释以及调试的乐趣)
使用的解决方案(感谢@Gilles)
使用="$( some code without escape specific) 谎言作为='some code'(' 用于反引号)
Result1="`echo '\"'`"
Result2="$(echo '"')"
echo '+Grep'
set | egrep "[R]esult"
->
Result1="
Result2="
+Grep
Result1='"'
Result2='"'
具体不识别代码仍需通过字符串“评估”
【问题讨论】: