1. $! 表示运行在后台的最后一个进程的PID
2. $$ 表示当前进程的pid, $PPID表示当前进程的父进程ID
3. $- 传递给脚本的标记(即用set命令设置的选项), 如
# echo $-
himBH
# set -f
# echo $-
fhimBH
4. $_ 保存之前一个命令的最后一个参数值
3. VISUAL 表示默认的可视编辑器
许多程序使用环境变量EDITOR或VISUAL来决定使用哪个编辑器。默认为vim,如果你用不惯vim, 可以在~/.bashrc里指定其他的编辑器, 如:
# export VISUAL="/bin/ls /usr/local"
# crontab -e
/tmp/crontab.XXXXGjHxQD
/usr/local:
app bin games Ice-3.3.0 java jdk1.5.0_06 lib man resin resin-3.0.25.tar.gz share
BerkeleyDB.4.6 etc Ice include jdk jdk-1_5_0_06-linux-i586.bin libexec mysql resin-3.0.25 sbin src
crontab: no changes made to crontab
4. SHLVL 是标识shell嵌套级别(SHell LeVeL)的环境变量。在一个shell运行过程中,新开一个shell,该变量会+1,故非login shell中,该值不为1。
Definition: $SHLVL: Incremented by one each time an instance of bash is started.
如:
if [ "x$SHLVL" != "x1" ]; then # We're not a login shell
for i in /etc/profile.d/*.sh; do
if [ -r "$i" ]; then
. $i
fi
done
fi
5. !$ !:1 这几个不是内部变量了, !$表示上次命令的最后一个token(记号), 主要是用在前次命令的最后是一个token是长文件名, 这次就可以直接使用!$来引用上次使用的文件名了。 比如:
# grep hello mysql.txt
# vi !$ 就表示直接用vi编辑mysql.txt
# ls -l
# echo !$ # 发现输出的是 -l
!:1 表示第二个token !:2 表示第三个token
6. $@ 与 $*
$* : 所有的位置参数都被看作为一个单词.
$@ : 与$*相同, 但是每个参数都是一个独立的引用字符串, 这就意味着, 参数是被完整传递的, 并没有被解释或扩展.
这也意味着, 参数列表中每个参数都被看作为单独的单词.
shift命令执行以后, $@
将会保存命令行中剩余的参数,
但是没有之前的$1
, 因为被丢弃了。
$@
也可以作为工具使用, 用来过滤传递给脚本的输入. cat
"$@"结构既可以接受从stdin传递给脚本的输入, 也可以接受从参数中指定的文件中传递给脚本的输入.
$@与$*的区别一例:
#!/bin/bash
function cnt()
{
local CNT=$#
echo $CNT
echo "$1"
return 0
}
cnt "$@"
cnt "$*"
cnt $@
cnt $*
exit 0
# ./2.sh
./2.sh a b c d "e f g"
5
a
1
a b c d e f g
7
a
7
a
# $@与$*中的参数只有在被双引号引用起来的时候才会不同, $@与$*的行为有时候令人迷惑,这些都依赖于IFS的设置
阅读(1846) | 评论(0) | 转发(0) |