我试图编写一个小脚本来列出给定变量的目录。
但是,在阅读我对变量ls
的输入后,我根本无法运行PATH
。
#!/system/bin/sh
echo "enter directory for listing"
read "PATH"
ls "$PATH" -R > list.txt
退出时:
ls: not found
...并且不向list.txt
写任何内容。
答案 0 :(得分:6)
变量名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
请注意,在这种情况下,-R
在"$path"
之前移动 - 而GNU系统将允许可选参数位于位置参数之后,许多旧的UNIX系统只会处理标志(如{{ 1}})如果他们在第一个非标志/选项参数之前找到,则有效。
答案 1 :(得分:-1)