我对bash很陌生,不知何故只是在这里找不到我做错了什么: (这是一个调用我的生成器的小bash脚本)
if [ -n $folder ]; then
$zorbalocation -q $generator -f -e files=\"$lFiles\" -e folder=\"lFolder\"
else
$zorbalocation -q $generator -f -e files=\"$lFiles\" -e folder=\".\"
fi
现在,显然我希望bash执行这些命令,具体取决于文件夹的内容。 但是,出于某种原因,bash坚持在文件= ...和文件夹= ...周围放置撇号(') 所以,它试图执行
../../../zorba/build/bin/zorba -q generator.xq -f -e 'files="test.xqlib"' -e 'folder="."'
而不是
../../../zorba/build/bin/zorba -q generator.xq -f -e files="test.xqlib" -e folder="."
有人知道为什么bash坚持在那里插入撇号吗?
美好的一天
丹尼
答案 0 :(得分:1)
Bash不会向执行的命令添加'。您只能在使用bash -x
或set -x
运行脚本时看到引号;然后bash尝试打印出它运行的命令,并且有用,如果你想将它们粘贴回bash,它会引用需要引用的标记,因此a="b"
变为'a="b"'
。您的问题必须是其他问题。
答案 1 :(得分:0)
只要他们不需要进一步解释(例如变量扩展),在参数或命令名称周围加上单引号应该不是bash的问题。
答案 2 :(得分:0)
将echo
放入您的陈述中,看看它们是否符合您的预期。另外,尽量不要逃避那些双引号。
if [ -n $folder ]; then
echo $zorbalocation -q $generator -f -e files="$lFiles" -e folder="lFolder"
else
echo $zorbalocation -q $generator -f -e files="$lFiles" -e folder="."
fi
否则,在执行此部分之前显示其余代码
答案 3 :(得分:0)
现在一切都清除了,似乎通过使用eval命令一切正常。 感谢所有人的帮助。