所以我知道这个问题在 StackExchange 上已被问过一百万次,但我无法在 bash 脚本的其他线程中实现解决方案。可能我太笨了,无法理解答案,所以请对我宽容点。
为简单起见,以下代码与我想要做的等效:
for i in {1..5}
do
echo $2.svg | grep 'rect x="$i"' && do_something_if_$i_is_found
done
这里的问题是,当我将 $i 用双引号引起来时,“$i”被视为字符串。
- 我不能使用单引号,因为我正在
x="5"
寻找$2.svg
- 转义单引号内的双引号使它们成为字符串的一部分,即
'rect x=\"$i\"'
答案1
您需要更改引号:
for i in {1..5}
do
echo "${2}.svg" | grep 'rect x = '$'\042'$i$'\042' && do_something_if_${i}_is_found
done
\042
是双引号的 ASCII 表示形式。
查看人 ASCII
或者简单地:
grep "rect x=\"$i\""