求助:解析Bash脚本中特殊字符$的含义(附代码片段)
Bash脚本$符号解析与代码逻辑说明
先把你贴的代码补全(原代码缺闭合循环的done),完整代码如下:
for i in $(seq $1 1 $2) do mkdir /for/july23/$$_$i cd $i origin=$PWD done
各$符号的具体作用
$(seq $1 1 $2):$()是命令替换,会把括号内命令的输出结果提取出来作为后续内容使用,这里就是把seq生成的数字序列作为循环的遍历对象。$1、$2是脚本的位置参数:运行脚本时在文件名后输入的第一个、第二个参数,比如你执行./your_script.sh 3 7,$1就是3,$2就是7,seq $1 1 $2会生成3、4、5、6、7这串数字。
$$:Bash内置特殊变量,代表当前脚本运行时的进程ID(PID),用它做目录名前缀是为了避免不同脚本实例创建的目录重名。$i:循环变量i的取值,每次循环会取seq生成的一个数字,既用来给新目录做后缀,也用来指定cd的目标目录。$PWD:Bash内置变量,代表当前所在目录的绝对路径,origin=$PWD就是把当前目录路径存入origin变量,这里的$是用来读取变量PWD的实际值。
代码整体逻辑
- 脚本启动后,读取你传入的两个参数,用
seq生成从第一个参数到第二个参数的整数序列,逐个赋值给循环变量i。 - 每次循环在
/for/july23/目录下创建一个格式为「PID_数字」的新目录,比如PID是1234、i是3时,就创建/for/july23/1234_3。 - 尝试切换到当前工作目录下以
i命名的目录(这里代码存在逻辑问题:刚创建的目录在/for/july23/路径下,但cd $i是切换到当前工作目录里的同名目录,若当前目录不是/for/july23/,这一步会报错)。 - 把当前所在目录的路径存入
origin变量,方便后续调用。
内容的提问来源于stack exchange,提问作者Cameron Green
相关产品推荐
相关产品推荐

