JON*_*402 4 shell scripting sh
我正在尝试编写一个小脚本来列出给定变量的目录.但是,ls在读取变量输入后,我根本无法运行PATH.
#!/system/bin/sh
echo "enter directory for listing"
read "PATH"
ls "$PATH" -R > list.txt
Run Code Online (Sandbox Code Playgroud)
这退出:
ls: not found
Run Code Online (Sandbox Code Playgroud)
......并没有写任何东西list.txt.
变量名PATH已经被保留用于不同的目的:它列出了搜索的所有可能位置,以查找未包含在shell中的命令.
ls是这样一个命令.因此,当您更改值时PATH,您将更改shell尝试查找ls可执行文件的方式; 除非新值PATH包含其中包含ls可执行文件的目录,否则任何进一步的运行尝试ls(或未构建到shell中的其他命令)都将失败.
相反,使用不同的变量名称 - 理想情况下,包括至少一个小写字符,以避免与(全大写)内置变量和环境变量冲突.
因此,一个更正的形式可能是:
#!/system/bin/sh
echo "enter directory for listing"
IFS= read -r path
ls -R -- "$path" > list.txt
Run Code Online (Sandbox Code Playgroud)
请注意,在这种情况下,它-R被移动"$path"- 虽然GNU系统将允许可选参数位于位置参数之后,但许多较旧的UNIX系统只会在第一个非标记/ 之前-R找到标记(如)有效选项参数.