首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命令替换为一行中的变量。

命令替换为一行中的变量。
EN

Stack Overflow用户
提问于 2013-08-05 22:23:21
回答 3查看 490关注 0票数 0

我得到以下错误:

代码语言:javascript
复制
> echo "${$(qstat -a | grep kig):0:7}"
-bash: ${$(qstat -a | grep kig):0:7}: bad substitution

我试着在.之前取下

代码语言:javascript
复制
> qstat -a | grep kig
1192530.perceus-     kigumen     lr_regul pbs.sh            27198     2     16    --  24:00:00 R 00:32:23

并将其用作qdel在openPBS中的参数,以便我可以删除从登录kigumen开始的所有进程。

因此,理想情况下,这应该是可行的:

代码语言:javascript
复制
qdel ${$(qstat -a | grep kig):0:7}

到目前为止,只有这样才能做到:

代码语言:javascript
复制
str=$(qstat -a | grep kig); qdel "${str:0:7}"

但我想要一个干净的没有临时变量的衬垫。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-08-05 22:40:28

您所使用的shell子字符串构造(:0:7)只用于变量,而不是命令替换。如果要在单个操作中执行此操作,则需要将字符串作为管道的一部分进行修剪,如下所示:

代码语言:javascript
复制
echo "$(qstat -a | grep kig | sed 's/[.].*//')"
echo "$(qstat -a | awk -F. '/kig/ {print $1}')"
echo "$(qstat -a | awk '/kig/ {print substr($0, 1, 7)}')"

(请注意,前两个打印第一个".“之前的所有内容,而最后一个打印前7个字符。)我不知道他们中有谁是特别干净的,但是他们没有温度变量.

票数 1
EN

Stack Overflow用户

发布于 2013-09-19 12:41:22

代码语言:javascript
复制
qstat -u palle | cut -f 1 -d "." | xargs qdel

杀了我所有的工作..。通常情况下,我会先把工作名称去掉,然后再删除.

所以我用了一个小脚本"idlist":

代码语言:javascript
复制
qstat -u palle | grep -E "*.in" | grep -E "$1" | cut -f 1 -d "." | xargs

去看我所有的“map_.”职位:

代码语言:javascript
复制
idlist "map_*"

杀了我所有的“map_.”职位:

代码语言:javascript
复制
idlist "map_*" | xargs qdel
票数 1
EN

Stack Overflow用户

发布于 2013-08-05 23:02:57

还有另一种方式:

代码语言:javascript
复制
    foreach   m1 in $(qstat -a );do
           if [[ $m1 =~ kig ]];then
               m2=${m1%.kig}
               echo "kig found $m2 "
               break
           fi
    done
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18068807

复制
相关文章

相似问题

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