日期:2014-05-16  浏览次数:20628 次

SHELL命令
各位达人,
shldir=${0%/*}
的${0%/*}的表示什么意思?
请赐教。

------解决方案--------------------
蛮有趣的,查了一下,含义类似于将$0(如果在某个脚本中直接调用上面的语句的话也即argv[0])中和/*(表示以/开始,后面可有任意个字符)匹配的最短部分删除,然后将处理后的值赋值给shldir,实际的含义则类似于获得调用脚本的路径。
例子:如在/root/下有一个脚本名称是test,里面有shldir=${0%/*},会有以下的情况:
进入/root/目录下,./test则shldir的值为. 因为/test匹配/*,因此被去除
直接调用/root/test,则shldir的值为 /root 因为/test是最短匹配/*的,因此被去除

对应的帮助可以info bash,然后跳到Shell Parameter Expansion的node,里面有说明。如果把%换成%%则是删除最长匹配部分,自己可以看看有什么差异。