我在bash脚本的for循环中有这一行:
gvpr -c \'N{pos=\"\"}\' ${FILE} | fdp -o data/${PAD}.${FILE} -Tdot -Nlabel='""' -Nshape=point -Gstart=$RANDOM
我需要脚本运行(在扩展变量之后)以下代码:
gvpr -c 'N{pos=""}' 072.grafo1643.10.planar_drawn.dot | fdp -o data/1.test -Tdot -Nlabel="" -Nshape=point -Gstart=$RANDOM
我不知道如何格式化脚本以使这些命令运行。任何帮助表示赞赏。
以下是整个脚本:
#!/bin/bash
if [ ! -d "data" ]; then
mkdir data
fi
for FILE in `ls`
do
if [ $FILE != process.sh ] && [ -f $FILE ]; then
fdp $FILE -o data/p.$FILE -Nlabel=\"\" -Nshape=point
for i in {1..100}
do
printf -v PAD "%03d" $i
gvpr -c \'N{pos='""'}\' ${FILE} | fdp -o data/${PAD}.${FILE} -Tdot -Nlabel='""' -Nshape=point -Gstart=$RANDOM
done
fi
done
答案 0 :(得分:2)
转义外部单引号肯定是错误的(如\'N{pos=\"\"}\'
)。单引号不会在其中评估变量(带$
)。因此,只需要对单引号内的单引号进行转义。
gvpr -c 'N{pos=""}' "$FILE" | fdp -o "data/${PAD}.${FILE}" -Tdot -Nlabel="" -Nshape=point -Gstart="$RANDOM"
......应该从句法的角度来看。当然,我不知道命令gvpr
和fdp
来判断他们的期望。
无论如何,'data/${PAD}.${FILE}'
不会产生你想要的东西,因为你想要扩展里面的变量。因此在我的例子中使用了"data/${PAD}.${FILE}"
。
哦,你的扩展示例与上面提到的"$FILE"
和"data/${PAD}.${FILE}"
在扩展形式上不完全匹配的内容相矛盾;)
假设您的gvpr
命令想要再次引用字符串,您必须选择:
gvpr -c '\'N{pos=""}\'' "$FILE" | fdp -o "data/${PAD}.${FILE}" -Tdot -Nlabel="" -Nshape=point -Gstart="$RANDOM"
答案 1 :(得分:2)
尽量逃避一些单引号。我没有gvpr
或fdp
因此无法测试。但你可以尝试一下,让我知道结果
#!/bin/bash
mkdir data 2>/dev/null
for FILE in *
do
if [ "$FILE" != process.sh ] && [ -f "$FILE" ]; then
fdp "$FILE" -o data/"p.${FILE}" -Nlabel="" -Nshape=point
for i in {1..100} # if you have Bash 4, you can do {001.100}
do
printf -v PAD "%03d" $i
gvpr -c 'N{pos=""}' "${FILE}" | fdp -o data/"${PAD}.${FILE}" -Tdot -Nlabel="" -Nshape=point -Gstart=$RANDOM
done
fi
done
答案 2 :(得分:0)
如果你想在'N {pos = \“\”}'中保留外部单引号,我会使用:
gvpr -c "'N{pos=\"\"}'" ${FILE} | fdp -o data/${PAD}.${FILE} -Tdot -Nlabel='""' -Nshape=point -Gstart=$RANDOM
其他选择:
gvpr -c \''N{pos=""}'\' ${FILE} | fdp -o data/${PAD}.${FILE} -Tdot -Nlabel='""' -Nshape=point -Gstart=$RANDOM
(您不需要在单引号字符串中转义双引号。)