我创建了名为 dir1 的新目录
然后我使用触摸命令添加苹果香蕉胡萝卜枣鸡蛋鱼葡萄火腿
之后我创建了文件Wildcards.sh
(顺便说一句,我使用 nano 来创建文件)。
#!/bin/bash
# This script will include wildcards
find . dir1
echo The contents of dir1 are:$find
echo
然后我执行它来测试它是否有效。确实如此,但我不希望这样。
我运行它就像./Wildcards.sh
并得到了
.
./ham
./egg
./grape
./date
./Wildcards.sh
./apple
./fish
./carrot
./banana
find: 'dir1': No such file or directory
The contents of dir1 are:
应该输出如下:
The contents of dir1 are: apple banana carrot date egg fish grape ham
请帮我找出我的错误?
答案1
当 dir1 是您的工作目录时,您找不到 dir1。你从来没有在变量“$find”中放入任何内容
FIND=$(cd ~/dir1; echo *)
echo "The contents of dir1 are: $FIND"
发生的情况是,您将工作目录更改为主文件夹中的 dir1,然后让 bash 显示所有未隐藏的内容(“*”)。结果保存在变量 FIND 中(但如果有错误,它们也会保存在 FIND 中)。如果你也想要隐藏的文件和目录,那就是:
FIND=$(cd ~/dir1; echo .* *)
答案2
来,试试
result=$(find ~/dir1)
echo "The contents of dir1 are: $result"
或者
echo "The contents of dir1 are: $(find ~/dir1)"
分解:
(如果我说的不正确,请原谅我,我对 Bash 不是最好的)
result=$(find ~/dir1)
运行find ~/dir1
然后将其存储在 中result
,在 s$(command)
内运行命令()
并使用命令的 STDOUT(标准输出/命令的输出)作为一个临时变量,
您也可以使用${result}
它来代替,它允许诸如echo "${result}asdf"
.
希望这可以帮助!请原谅我的任何格式不当,这是我的第一篇文章:P
答案3
除非您有其他未提及的要求,否则您需要的行是
echo The contents of dir1 are:$(ls dir1)
您可以在 bash 脚本中或直接从命令行使用它。如果您想将文件名放在变量中,例如以供将来使用,那么
files=$(ls Wallpapers)
echo The contents of dir1 are:$files
答案4
您的脚本经过更正。
#!/bin/bash
# This script has no wildcards
find_output="$(find dir1)"
echo 'The contents of dir1 are:'"$find_output"
echo
我想我应该添加另一个答案,因为所有现有的答案都有错误。
您的一些错误是:
- 您似乎假设进程的输出被放入变量中。事实并非如此,除非你要求如此。
find
不需要 a.
作为其第一个参数。是的,经常如此,但是……- 下一个问题是您需要使用引号。我认为这还没有引起错误。有些人会说,并非所有的引号都是必需的,这是正确的。然而它们是安全的,在你完全掌握它们之前,你也可以将它们包括在内。之后您也可以将它们包括在内。
- 那么你的评论是不正确的。我讨厌评论,因为它们几乎总是错的。注释只能说明原因,或者在语言太弱而无法清楚表达意图时使用。
关于 shell 变量大小写的注释。
Shell 变量应为小写。这有一个标准。如果你将它们设为大写,你会时不时地遇到意想不到的错误。