循环中简单的命令执行 - bourne shell脚本

sun*_*107 1 bash shell

我有一个名为inp.txt的文件,其中列出了3个目录名

#!/bin/sh
while read dirname
do
        echo $dirname
        "ls -l" $dirname
done < inp.txt
Run Code Online (Sandbox Code Playgroud)

当我运行上面的操作时,我收到此错误:

line 5: ls -l: command not found
Run Code Online (Sandbox Code Playgroud)

如果我只做"ls"而不是"ls -l",它可以正常工作.我在这里错过了什么?

Joh*_*ica 7

摆脱报价.

while read dirname
do
        echo "$dirname"
        ls -l "$dirname"
done < inp.txt
Run Code Online (Sandbox Code Playgroud)

当你有引号时,你会说,"把它视为一个单词." shell查找名为的可执行文件,ls -l而不是将参数传递-l给命令ls.

Nitpicker注意:如果你想正确使用引号,请添加它们"$dirname".否则,如果你有一个名为"音乐文件"的目录,名称中有空格,没有引号,你的脚本会将其视为两个目录名称并打印如下:

ls: Music: No such file or directory
ls: Files: No such file or directory
Run Code Online (Sandbox Code Playgroud)