关于 shell 变量大小写的注释。

关于 shell 变量大小写的注释。

我创建了名为 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 变量应为小写。这有一个标准。如果你将它们设为大写,你会时不时地遇到意想不到的错误。

相关内容