我想从一个bash脚本运行一个命令,其中有单引号和一些其他命令在单引号和变量中。

例如:repo forall -c '....$variable'

在这种格式中,$被转义,变量不会展开。

我尝试了以下变化,但它们被拒绝了:

repo forall -c '...."$variable" '

repo forall -c " '....$variable' "

" repo forall -c '....$variable' "

repo forall -c "'" ....$variable "'"

如果我将值替换为变量,命令就会很好地执行。

请告诉我我哪里做错了。


当前回答

下面是对我有效的方法

QUOTE="'"
hive -e "alter table TBL_NAME set location $QUOTE$TBL_HDFS_DIR_PATH$QUOTE"

其他回答

变量可以包含单引号。

myvar=\'....$variable\'

repo forall -c $myvar

这对你有用吗?

eval repo forall -c '....$variable'

只需使用printf

而不是

repo forall -c '....$variable'

使用printf将变量标记替换为展开的变量。

例如:

template='.... %s'

repo forall -c $(printf "${template}" "${variable}")

下面是对我有效的方法

QUOTE="'"
hive -e "alter table TBL_NAME set location $QUOTE$TBL_HDFS_DIR_PATH$QUOTE"

编辑:(根据问题中的评论:)

从那以后我一直在调查这件事。我很幸运,手头有回购。我仍然不清楚你是否需要把你的命令用单引号括起来。我研究了回购语法,我认为你不需要。您可以在命令周围使用双引号,然后在命令内部使用任何您需要的单引号和双引号,前提是要转义双引号。