当一个含有变量a的命令存储在某个变量b中时, 利用$($b)时有可能会报错。如下面的代码,有时可以成功执行,有时会发生“ipcs|grep xxx can not be found"的错误。
IFS=" " if isLinux then IPCSCMD="ipcs" else IPCSCMD="ipcs|grep $LOGNAME" fi for Eachline in $($IPCSCMD) do IFS=" " # Space # Handle IPCs ... done
究其根源,应该是对IPCSCMD的解析出了问题。将代码改为下面的形式,就可以正确执行了。注意IFS的变化——改成下面的形式后必须将循环内的IFS改为Space和Tab。
IFS=" " if isLinux then ipcs else ipcs|grep $LOGNAME fi | while read Eachline do IFS=" " # Space and tab # Handle IPCs ... done
本文探讨了在Shell脚本中使用变量存储命令并进行解析时遇到的问题,尤其是在不同环境下的兼容性和错误处理方面。通过对比两种不同的实现方式,详细解释了如何避免解析错误,并给出了正确的实践建议。
786

被折叠的 条评论
为什么被折叠?



