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

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

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

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

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

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

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

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

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

请告诉我我哪里做错了。


当前回答

这对你有用吗?

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

其他回答

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

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

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

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

只需使用printf

而不是

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

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

例如:

template='.... %s'

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

变量可以包含单引号。

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

repo forall -c $myvar

这对你有用吗?

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

下面是对我有效的方法

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