小编Gre*_*n23的帖子

什么`$ {1#*=}`在Bash中意味着什么?

我在StackOverflow上找到了一个很棒的答案,它解释了如何将关联数组传递给函数.有人能够帮我弄清楚${1#*=}下面代码中的语法是什么?(从借来的答案jaypal辛格):

#!/bin/bash

declare -A weapons=(
  ['Straight Sword']=75
  ['Tainted Dagger']=54
  ['Imperial Sword']=90
  ['Edged Shuriken']=25
)

function print_array {
    eval "declare -A arg_array="${1#*=}
    for i in "${!arg_array[@]}"; do
       printf "%s\t%s\n" "$i ==> ${arg_array[$i]}"
    done
}

print_array "$(declare -p weapons)"
Run Code Online (Sandbox Code Playgroud)

这是我到目前为止的猜测(纠正我,如果我错了任何这些):
- 1意味着传递给函数($1${1})的第一个参数
- #意味着索引$1,因为$1是一个关联数组,使得#$1
- *表示#关联数组中键的值$1

离开了=.这意味着什么?这是一种表明你想要的方式,#并且*是指关联数组的键和值吗?

arrays variables syntax bash associative-array

3
推荐指数
2
解决办法
246
查看次数

如何从Pacman/Yaourt搜索返回包列表

----编辑----
将脚本名称从更改pacsearchpacdot.
显然yaourt -Ssaq这样做,所以这个脚本没有我想象的那么必要.虽然,我仍然发现使用pacdot -w在文本文档中打开结果很有帮助.
- - /编辑 - -

这不是一个问题,但我认为其他人可能会觉得这很有用.有人可能最终会在stackoverflow上试图找到这样的解决方案.

在Arch Linux上,我一直在寻找自己用pacman或yaourt搜索并希望我能得到包名,而不是所有额外的东西.例如,我希望能够跑步yaourt -Sa $(yaourt -Ssa package).奇怪的是,pacman和yaourt似乎没有这个选项(至少我不能说),所以我写了一个python脚本来做到这一点.如果你愿意,可以复制它.你可以把它命名为你想要的,但我会把它称为pacdot.py.

pacdot.py packageyaourt -Ssa package只是列出包名称.

我添加了一些额外的选项:

  • pacdot.py -o package 只列出官方Arch存储库的结果,而不是AUR.
  • pacdot.py -i package将安装所有找到的包.如果你曾经想过运行类似的东西yaourt -Sa $(yaourt -Ssa package),那就是这个命令的作用.

  • pacdot.py -w package 将:

    1. 创建一个名为'the-package-you-searching.txt'的文件,
    2. 编写一个可以安装找到的包的示例命令,
      (yaourt -Sa all-of-results),
    3. 将每个结果写在一个新行上,然后
    4. 为您打开文件(使用默认文本编辑器).

这是代码:

#!/bin/python3
import argparse
import re
from subprocess import Popen, PIPE, call
from collections import deque


desc = ''.join(('Search the …
Run Code Online (Sandbox Code Playgroud)

linux archlinux python-3.x

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

列表理解中的"如果...或......"语句?

在Python 3.4.2中,是否有一种方法可以在列表推导中使用"if ...或..."语句?

例:

filtered_list = [x for x in other_list
                 if not '    ' in x or '    ' in other_list[int(other_list.index(x) -1)]]
                                                 #^item just before "x" in "other_list"
Run Code Online (Sandbox Code Playgroud)

我知道这个命令不起作用.我知道这个也不是:

filtered_list = [x for x in other_list
                 if not ('    ' in x) or ('    ' in other_list[int(other_list.index(x) -1)])]
                                                    #^item just before "x" in "other_list"
Run Code Online (Sandbox Code Playgroud)

有没有办法做到这一点?一个"for"循环会更容易阅读,但我试图推动我对列表理解的理解.提前致谢.

(奇怪的是,我在stackoverflow上找不到像这样的先前问题.)

python list-comprehension python-3.x

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

Bash - 关联数组中的值指针?

是否有一种方法Bash,使一个指针的关键在一个关联数组?像这样:

declare -A mapp
mapp=( ["key"]="${value}" )

for k in "${!mapp[@]}"; do 
    pointer="${mapp["${k}"]}"   # How do I do this?
done
Run Code Online (Sandbox Code Playgroud)

通常,您不需要使用指针,但我很想知道是否有办法制作指针.

在更简单的情况下(即,对于普通/字符串变量),我会做一个像这样的指针:

pointer=b
read -p "Enter something: " b
eval pointer=\$${pointer}
Run Code Online (Sandbox Code Playgroud)

我如何为关联数组执行此操作?这不起作用(跳过strikethroughed代码):

declare -A mapp
mapp=( ["first"]="${a}"  ["second"]="${b}" )

for k in "${!mapp[@]}"; do 
    v=mapp["${k}"]

    read -p "Enter ${k}: " new

    eval v=\$${v}    # Doesn't work

done
Run Code Online (Sandbox Code Playgroud)

declare -A mapp
mapp=( ["first"]="${a}"  ["second"]="${b}" )

for k in "${!mapp[@]}"; do 
    v=mapp["${k}"] …
Run Code Online (Sandbox Code Playgroud)

arrays bash pointers associative-array

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

Golang:检查文件是否是硬链接?

如何检查文件是否是Go中的链接os.FileMode只有符号链接模式,而不是硬链接.

我有一个想法,不幸的是不起作用:

package main

func main() {
    filename := os.Args[1]
    var hardlink bool
    link, _ := os.Readlink(filename)
    fi, _ := os.Stat(filename)
    mode := string(fi.Mode().String()[0])
    if link != "" && mode != "L" {
        hardlink = true
    }
    fmt.Printf("%v is hard link? %v\n", filename, hardlink)
}
Run Code Online (Sandbox Code Playgroud)

这^不起作用,因为os.Readlink只读符号链接,而不是硬链接.

我发现了一个有点相关的答案:
计数硬链接在Go文件
,但这个答案显示了如何找到的硬链接到一个文件,而不是是否一个文件本身的硬链接.

我猜这个答案中使用的系统调用包,或者更好的是,sys包有一种方法来测试文件是否是硬链接.有谁知道这样做?(我很难理解这些包,因为它们太低了.)

编辑

我应该补充我想检查这个的原因.我正在尝试创建一个函数来创建目录[using filepath.Walk()] 的tar存档.在此函数中,当我*tar.Header为文件创建时,我将值设置为*tar.Header.Typeflag.
例如,if fi是文件的*os.FileInfo …

attributes file hardlink go

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