首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >遍历要在BASH中打印和执行的命令

遍历要在BASH中打印和执行的命令
EN

Stack Overflow用户
提问于 2009-07-29 22:03:27
回答 5查看 622关注 0票数 2

在BASH中,我想这样做:

代码语言:javascript
运行
复制
#!/bin/bash                                                                     

HOST="blah"
USER="foo"
REMOTE_ROOT="${HOST}:~${USER}/"

REP_NAME=`basename $1`
TARGET_NAME="${REP_NAME}.git"

CMD1="git clone --bare $1 $TARGET_NAME"
CMD2="touch ${TARGET_NAME}/git-daemon-export-ok"
CMD3="scp -r $TARGET_NAME $REMOTE_ROOT"
CMD4="rm -rf $TARGET_NAME"

for i in {1..4}
do
  CMD="${CMD${i}}"
  echo "$CMD"
  `$CMD`
done

也就是说,我想遍历一系列命令,显示正在执行的命令,然后执行它。

我不知道如何执行双重取消引用(CMD="${CMD${i}}“在BASH中是不合法的)。

或者,我很乐意这样做:

代码语言:javascript
运行
复制
for CMD in "CMD1 CMD2 CMD3 CMD4"
do
  echo $$CMD
done

当然,这也不是正确的语法。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2009-07-29 22:06:36

代码语言:javascript
运行
复制
CMDS[1]="git clone --bare $1 $TARGET_NAME"
CMDS[2]="touch ${TARGET_NAME}/git-daemon-export-ok"
CMDS[3]="scp -r $TARGET_NAME $REMOTE_ROOT"
CMDS[4]="rm -rf $TARGET_NAME"

# ...

for x in 1 2 3 4
do
    ${CMDS[x]};
done
票数 3
EN

Stack Overflow用户

发布于 2009-07-29 22:06:23

你可以把你的CMD放在array里吗?

票数 1
EN

Stack Overflow用户

发布于 2009-07-29 22:14:16

你需要${!parameter}语法,至少可以在bash中工作。例如:

代码语言:javascript
运行
复制
#!/bin/sh

CMD1="ls"
CMD2="pwd"

for CMD in {CMD1,CMD2} ; do
    echo ${!CMD}
    ${!CMD}
done
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1203326

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档