1

我正在编写一个包含类似于以下命令的 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 是否支持不需要分叉子外壳的解决方案,就像$((6 * 7))可以用来代替$(expr 6 \* 7)? 另外,有没有办法将结果限制为单个匹配?

4

2 回答 2

1

作为替代方案,使用for循环并break在第一次迭代后:

shopt -s nullglob
for f in /tmp/foo-*; do 
    echo "Configure with --with-foo=\"$f\""
    break
done
于 2013-07-19T16:25:34.280 回答
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
于 2013-07-19T17:14:30.467 回答