如何捕获文件名扩展? (扩大球体)
How to capture Filename Expansion? (expanding globs)
--免责声明--
对于这个问题,我愿意接受更好的标题。
我正在尝试获取匹配文件的全名:"target/cs-*.jar"
.
glob 是版本号。
现在的版本是 0.0.1-SNAPSHOT
.
所以,在下面,我想 jar_location
评估为 cs-0.0.1-SNAPSHOT.jar
我已经尝试了一些解决方案,其中一些有效,一些无效,我不确定我缺少什么。
有效
jar_location=( $( echo "target/cs-*.jar") )
echo "${jar_location[0]}"
不起作用
jar_location=$( echo "target/cs-*.jar")
echo "$jar_location"
jar_location=( "/target/cs-*.jar" )
echo "${jar_location}"
jar_location=$( ls "target/cs-*.jar" )
echo "${jar_location}"
--编辑--
为标题添加了文件名扩展
Link 到 Bash Globbing / Filename Expansion
类似问题:The best way to expand glob pattern?
如果您使用 bash,最好的选择是使用数组来扩展 glob:
shopt -s nullglob
jar_locations=( target/cs-*.jar )
if [[ ${#jar_locations[@]} -gt 0 ]]; then
jar_location=${jar_locations##*/}
fi
启用nullglob
意味着如果没有匹配项,数组将为空;如果不启用此 shell 选项,则在没有匹配项的情况下,数组将包含文字字符串 target/cs-*.jar
。
如果数组的长度大于零,则设置变量,使用扩展从数组的第一个元素中删除直到最后一个 /
的所有内容。这使用 ${jar_locations[0]}
和 $jar_locations
得到相同的东西,即数组的第一个元素。如果你不喜欢那样,你总是可以分配给一个临时变量。
GNU find 的替代方案:
jar_location=$(find target -name 'cs-*.jar' -printf '%f' -quit)
这将打印第一个结果的文件名并退出。
请注意,如果找到多个文件,这两个命令的输出可能会有所不同。
--免责声明--
对于这个问题,我愿意接受更好的标题。
我正在尝试获取匹配文件的全名:"target/cs-*.jar"
.
glob 是版本号。
现在的版本是 0.0.1-SNAPSHOT
.
所以,在下面,我想 jar_location
评估为 cs-0.0.1-SNAPSHOT.jar
我已经尝试了一些解决方案,其中一些有效,一些无效,我不确定我缺少什么。
有效
jar_location=( $( echo "target/cs-*.jar") )
echo "${jar_location[0]}"
不起作用
jar_location=$( echo "target/cs-*.jar")
echo "$jar_location"
jar_location=( "/target/cs-*.jar" )
echo "${jar_location}"
jar_location=$( ls "target/cs-*.jar" )
echo "${jar_location}"
--编辑--
为标题添加了文件名扩展
Link 到 Bash Globbing / Filename Expansion
类似问题:The best way to expand glob pattern?
如果您使用 bash,最好的选择是使用数组来扩展 glob:
shopt -s nullglob
jar_locations=( target/cs-*.jar )
if [[ ${#jar_locations[@]} -gt 0 ]]; then
jar_location=${jar_locations##*/}
fi
启用nullglob
意味着如果没有匹配项,数组将为空;如果不启用此 shell 选项,则在没有匹配项的情况下,数组将包含文字字符串 target/cs-*.jar
。
如果数组的长度大于零,则设置变量,使用扩展从数组的第一个元素中删除直到最后一个 /
的所有内容。这使用 ${jar_locations[0]}
和 $jar_locations
得到相同的东西,即数组的第一个元素。如果你不喜欢那样,你总是可以分配给一个临时变量。
GNU find 的替代方案:
jar_location=$(find target -name 'cs-*.jar' -printf '%f' -quit)
这将打印第一个结果的文件名并退出。
请注意,如果找到多个文件,这两个命令的输出可能会有所不同。