bash脚本,使用变量。

时间:2014-03-19 19:52:58

标签: bash variables input literals

我试图在路径中使用输入变量$ 1

if [ -d "$1" ]; then
   echo "The Directory Exists"  
   files=`find /cygdrive/c/2014-03-19 -name "*ellow.txt"`
   for file in $files; do
   etc...

现在,我不想使用日期,而是使用1美元(作为用户输入的变量)来使用他们想要使用的目录。 / cygdrive / C / $ 1但我不认为这可以在后面滴答作响。有什么建议?我已经尝试为$ 1分配一个变量名,但它仍然是字面意思的相同问题。我怎么能在这条路径中使用变量?

干杯小伙子。

2 个答案:

答案 0 :(得分:2)

在这些情况下确实会出现扩张。也就是说,正确使用find需要注意;这些文件名是由软件错误或恶意企图创建的,很容易做出破坏不寻常文件名的事情。

if [ -d "/cygdrive/c/$1" ]; then
    while IFS='' read -r -d '' file; do
      something_with "$file"
    done < <(find "/cygdrive/c/$1" -name '*ellow.txt' -print0)
else
    echo "$1 is not a directory" >&2
fi

参考文献:

答案 1 :(得分:1)

是的,变量在反引号中扩展:

> test=foo
> echo `echo $test`
foo

所以你的脚本应该按照书面形式工作。

通常认为使用$()更好的做法(除非您需要与不支持该构造的旧平台兼容)。这几乎等同于反引号,但它允许嵌套(并且更清晰)。

编辑:虽然这是问题的答案,但Charles Duffy指出了脚本的其他几个问题。一般来说,这些问题只影响&#34; odd&#34;名称(包括空格和通配符),但如果任何可能会在这样的上下文中运行您的脚本,那么应该考虑这些问题。 (如果这不仅仅是一次性的单会话功能定义,那么,是的,它有可能在你不期望的环境中重复使用。)