【问题标题】:Shell Script unclear usage of " : "Shell Script 不清楚“:”的用法
【发布时间】:2016-03-06 16:12:09
【问题描述】:

我一直在尝试为我的项目更改旧的 Shell 脚本。我已经进行了一些研究,但是 : 在 shell 脚本中的用法对我来说还不是很清楚。

#!/bin/bash

cd /home/dir1/dir2/dir3

FILES=../lib/*

CLASSPATH=.:../conf/

for f in $FILES
do
    CLASSPATH=$CLASSPATH:$f
done

echo $CLASSPATH

他们在这里试图做什么,是在两个目录中寻找相同命名的文件并将它们分配给CLASSPATH

【问题讨论】:

  • 这是一个字面量:,即CLASSPATH中的路径用:分隔
  • 当然,最好使用CLASSPATH=.:/home/dir1/dir2/conf$(printf ":%s" /home/dir1/dir2/lib/*)
  • printf 或者这里没有数组会更加更安全。也就是说,使用数组也可以使用$(IFS=:; echo "${arr[*]}")

标签: bash shell unix for-loop


【解决方案1】:

: 是 CLASSPATH 的分隔符。

你的脚本基本上是:

  1. 将当前目录设置为/home/dir1/dir2/dir3
  2. ../lib/* 分配给FILES
  3. .(当前目录)和../conf分配给CLASSPATH(用:分隔)
  4. 对于FILES 中的每个文件,将CLASSPATH 设置为自身(以保留旧值)并附加找到的文件的路径(再次用: 分隔)

【讨论】:

  • 感谢@arco444 的编辑 :) 英语不是我的母语 :D
【解决方案2】:

: 是分隔符。

所以他们正在做的是获取目录../lib中的所有文件,并通过for循环将它们全部附加到CLASSPATH

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-10-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-28
    • 2011-08-14
    • 2017-10-06
    相关资源
    最近更新 更多