Tsb*_*Tsb 2 bash shell command-line
因此,在尝试这样做了几个小时之后,这就是我想要做的:
编写一个名为 direct.sh 的 bash shell 脚本。此脚本将采用任意数量的命令行参数。您的脚本应该从第一个参数开始创建目录,然后是第一个参数中的第二个目录,然后是第二个参数中的下一个目录,依此类推。
例如 direct.sh dir1 dir2 dir3
应该先创建dir1,然后创建dir1/dir2,最后再创建dir1/dir2/dir3
这是我在 20 小时后所做的。
#!/bin/bash
for i in $@
do
mkdir -p $1/$i
done
Run Code Online (Sandbox Code Playgroud)
我知道这是错误的。请帮忙。
这可以在一个步骤中完成,因为mkdir -p将在途中创建所有需要的父目录(这就是-p选项所做的)。
#!/bin/bash
IFS=/
mkdir -p "$*"
Run Code Online (Sandbox Code Playgroud)
说明:$*扩展到脚本的所有参数,拼接成一个字符串,由IFS. 这通常是一个空格字符,但在这里它被设置为“/”。它周围的双引号可防止意外的分词或通配符扩展。
因此,如果您运行direct.sh dir1 dir2 dir3,它会执行mkdir -p "dir1/dir2/dir3",这将创建所有 3 个目录级别(或至少,那些尚不存在的目录)。
顺便说一句,一般你应该IFS在像这样改变它后恢复正常。但是由于脚本中没有任何可能会被弄乱的内容,并且在脚本中更改它不会影响父进程(用于运行脚本的 shell),因此在这种情况下无需将其重新设置。