关于Bash脚本中/tmp/t$$含义及$tmp工作机制的疑问
脚本细节解析
1. tmp=/tmp/t$$ 的含义
$$是Bash的特殊内置变量,它的值是当前脚本运行时的进程ID(PID)。每个运行中的进程都有唯一的PID,用它命名临时文件能避免和其他进程的临时文件重名冲突。tmp=/tmp/t$$就是把路径/tmp/t[当前脚本PID]赋值给变量tmp。比如当前脚本的PID是1234,那么tmp的值就是/tmp/t1234。
2. $tmp 的工作逻辑与临时文件的处理
你误解了$tmp的作用——它并没有存储命令的输出内容,而是存储了临时文件的路径:
mycommand > $tmp这一步是把mycommand的标准输出重定向到$tmp指向的文件(也就是/tmp/t$$),所以这一步确实会在/tmp目录下创建这个临时文件,并把命令输出写入其中。grep -q 'Mytext' $tmp是读取这个临时文件的内容,检查是否包含Mytext,-q参数让grep只返回结果状态,不输出匹配内容。rm -f $tmp就是删除这个临时文件,因为$tmp存储的是文件的完整路径,所以这条命令会精准删除/tmp下那个以t加PID命名的文件。
补充:如果想把命令输出存在变量里而不创建临时文件,写法是output=$(mycommand),之后用grep -q 'Mytext' <<< "$output"来检查,但这种方式适合输出量不大的场景;原脚本用临时文件的好处是处理大输出时不会占用过多内存。
内容的提问来源于stack exchange,提问作者Ablia
相关产品推荐
相关产品推荐

