我正在编写一个包含类似于:
的命令的bash脚本echo Configure with --with-foo=\"/tmp/foo-*\"
我希望此命令生成输出,例如:
Configure with --with-foo="/tmp/foo-1.3.2"
但是模式没有扩展,因为它嵌入了字符串中。我通过使用命令替换来实现它:
echo Configure with --with-foo=\"$(echo /tmp/foo-*)\"
我认为这是标准/ bin / sh解决方案,但bash支持不需要分支子shell的解决方案,就像$((6 * 7))
可以代替{{ 1}?另外,有没有办法将结果限制为单个匹配?
答案 0 :(得分:1)
作为替代方案,在第一次迭代后使用for
循环和break
:
shopt -s nullglob
for f in /tmp/foo-*; do
echo "Configure with --with-foo=\"$f\""
break
done
答案 1 :(得分:1)
要检查模式扩展到的文件数量,请在使用之前将扩展存储到数组中
shopt -s nullglob
foo=(/tmp/foo-*)
if (( ${#foo[@]} == 0 )); then echo "no foo files"
elif (( ${#foo[@]} > 1 )); then echo "too many foo files"
else do something with "${foo[0]}"
fi