使用ubuntu 10.10我在命令行上运行以下命令:
result="$(ls -d !(*.*))"
chmod +x $result
这将获得一个没有扩展名的文件列表,并使其可执行。
但是当我将它移动到脚本文件(shell)时,它不起作用。根据我在论坛上阅读的内容,这与命令替换在不同的子shell中运行有关。
但我找不到一个可以解决问题的解决方案:(
那么如何获得命令的结果并将其存储在脚本中的变量中?
答案 0 :(得分:2)
(因为@ user000001似乎没有在评论中写下他们的评论,所以我会写下答案。所以应该得到他们的信任。)
您使用的功能是extglob
的{{1}}(扩展通配)功能。对于交互式shell,默认情况下启用此选项,对于非交互式shell(即shell脚本),默认情况下禁用此选项。要启用它,请使用命令bash
。
请注意,此命令仅对下面的行有效:
shopt -s extglob
它不会影响同一行的解析:
shopt -s extglob
ls -d !(*.*)
一般来说,我想警告使用shopt -s extglob; ls -d !(*.*) # won't work!!
的这些特殊功能。它使代码相当不可移植。我建议使用POSIX功能和工具,它们可以很容易地将代码移植到另一个平台,它们也代表了更多开发人员理解的某些可能性,而无需先查阅文档。
您想要实现的目标也可以使用bash
来完成。这也具有与奇怪的文件名(例如包含空格,引号等)相结合而没有问题的优点:
find