我想从一个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

我想知道为什么我永远不能让我的awk语句从ssh会话打印,所以我找到了这个论坛。这里没有什么直接帮助我,但如果有人有类似的问题,然后给我一个投票。似乎任何单引号或双引号都没有帮助,但我并没有尝试所有的方法。

check_var="df -h / | awk 'FNR==2{print $3}'"
getckvar=$(ssh user@host "$check_var")
echo $getckvar

你得到了什么?一无所有。

修复:逃脱\$3在您的打印功能。

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

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

这对你有用吗?

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