小编koo*_*ola的帖子

将Bash数组转换为分隔的字符串

我想知道以下内容;

  1. 为什么给定的非工作示例不起作用.
  2. 如果有任何其他清洁方法,而不是工作示例中给出的方法.

非工作的例子

> ids=(1 2 3 4);echo ${ids[*]// /|}
1 2 3 4
> ids=(1 2 3 4);echo ${${ids[*]}// /|}
-bash: ${${ids[*]}// /|}: bad substitution
> ids=(1 2 3 4);echo ${"${ids[*]}"// /|}
-bash: ${"${ids[*]}"// /|}: bad substitution
Run Code Online (Sandbox Code Playgroud)

工作实例

> ids=(1 2 3 4);id="${ids[@]}";echo ${id// /|}
1|2|3|4
> ids=(1 2 3 4); lst=$( IFS='|'; echo "${ids[*]}" ); echo $lst
1|2|3|4
Run Code Online (Sandbox Code Playgroud)

在上下文中,用于sed命令的分隔字符串用于进一步解析.

arrays string bash delimited-text

32
推荐指数
4
解决办法
4万
查看次数

从后台进程获取PID作为另一个用户运行

通过以下方式从提示中轻松获取后台进程ID:

$ my_daemon &
$ echo $!
Run Code Online (Sandbox Code Playgroud)

但是,如果我想以不同的用户身份运行它,例如:

su - joe -c "/path/to/my_daemon &;"
Run Code Online (Sandbox Code Playgroud)

现在我如何捕获my_daemon的PID?

bash pid su

6
推荐指数
1
解决办法
5988
查看次数

Python 2.6 - 解析参数

问题:需要解析一些可以按任何顺序排列的特定参数,non是可选的:-h -d -src -dst

我是Python的新手,并且已经查看过getopt和argparse之类的替代方案,但是无法获得一个工作示例,所以如下所示进行自定义;

argv=sys.argv[1:]
args=[]
for idx, arg in enumerate(argv):
    # if is arg
    if arg.startswith("-"):
        # find arg match
        for i in ("-h","-d:","-src:","-dst:"):
            # requires var
            if i == arg + ':' and idx < len(argv)-1:
                if not argv[idx+1].startswith("-"):
                    args.append((arg,argv[idx+1]))
                    break
            # no var
            elif i == arg:
                args.append((arg,""))
                break
    else:
        continue
# may contain duplicates
print(args)
# no dupes
print(set(args))
Run Code Online (Sandbox Code Playgroud)

任何人都可以建议改进和/或更好的例子来实现问题目标吗?

python arguments python-2.6 argparse

2
推荐指数
1
解决办法
4890
查看次数

标签 统计

bash ×2

argparse ×1

arguments ×1

arrays ×1

delimited-text ×1

pid ×1

python ×1

python-2.6 ×1

string ×1

su ×1