我有一个名为inp.txt的文件,其中列出了3个目录名
#!/bin/sh
while read dirname
do
echo $dirname
"ls -l" $dirname
done < inp.txt
当我运行上述内容时,我收到此错误:
line 5: ls -l: command not found
如果我只做“ls”而不是“ls -l”,它就可以了。我在这里缺少什么?
答案 0 :(得分:7)
摆脱引号。
while read dirname
do
echo "$dirname"
ls -l "$dirname"
done < inp.txt
当你有引号时,你会说,“把它视为一个单词。” shell查找名为ls -l
的可执行文件,而不是将参数-l
传递给命令ls
。
Nitpicker注意:如果您想正确使用引号,请在"$dirname"
周围添加引号。
否则,如果你有一个名为“音乐文件”的目录,名称中有空格,没有引号,你的脚本会将其视为两个目录名称并打印如下:
ls: Music: No such file or directory
ls: Files: No such file or directory
答案 1 :(得分:1)
您应该删除ls -l
周围的引号。
答案 2 :(得分:1)
shell将空间解释为参数分隔符。通过在某些内容引用引号,可以强制shell将其视为一个参数。执行时,shell将第一个参数解释为要执行的命令。在这种情况下,您告诉它执行名为“ls -l”的命令,不带参数,而不是带有参数“-l”的“ls”。