我对Bash脚本非常陌生。我有一个“ testscript”,它用作更高级/有用的脚本的基础:
#!/bin/bash
files=$1
for a in $files
do
echo "$a"
done
当我不带引号的情况下调用它时,它只会在目录中拾取一个文件:
testscript *.txt
但是,当我用引号将其调用时,它可以正常工作并挑选出所有文本文件:
testscript '*.txt'
这里发生了什么?
调用程序时
testscript *.txt
然后您的shell进行扩展并计算出所有值。因此,它可以有效地将您的程序调用为
testscript file1.txt file2.txt file3.txt file4.txt
现在,您的程序只能查看,$1
因此只能在上运行file1.txt
。
通过在命令行上引用,您可以将文字字符串传递*.txt
给脚本,这就是存储在中的内容$1
。for
然后,您的循环将其展开。
通常,您会使用"$@"
而不是$1
在这样的脚本中使用。
对于来自CMD脚本的人来说,这是一个“陷阱”,在此命令外壳程序不进行globbing(众所周知),并且始终传递原义字符串。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句