小编Cha*_*ffy的帖子

“ lambda不能有赋值语句”-那么“ foo = lambda x:x * 2”为什么合法?

我正在阅读Steven Lott撰写的《 Functional Python Programming》,这是一本关于“功能性”地使用Python而不是以面向对象的方式使用的书,其中大部分示例着重于探索性数据分析。

洛特说Lamda不能有赋值语句。但是在同一页面上,他为变量分配了一个lambda函数:

>>mersenne = lambda x: 2**x-1
>>mersenne(17)
 131071
Run Code Online (Sandbox Code Playgroud)

那怎么不是任务陈述呢?我还缺少其他“分配”的感觉吗?

python lambda variable-assignment

0
推荐指数
1
解决办法
706
查看次数

从bash数组中查找最大值和最小值

我有一个 txt 文件,里面写有整数值,带有“;” 分隔器。117;92;16;20;

我需要比较这些并选择最高的一个。我的代码:

IFS=';' #Internat Field Separator
read -ra vector<$file
max=$vector[0]
min=$vector[0]

for i in ${vector[@]}
do

if [[ $i > $max ]] ; then
max=$i
fi

if [[ $i < $min ]] ; then
min=$i

fi
done
echo "Max value is $max, minimal value is $min"
break
Run Code Online (Sandbox Code Playgroud)

输出是:

最大值为 92,最小值为 16。

所以这当然是错误的。当我尝试回应它时:

echo $value ( in a loop of course ) 
Run Code Online (Sandbox Code Playgroud)

输出是

177[0] 92 16 25

为什么第一个字母显示为 int[0]?因此,我无法比较它们。我什么都想不通......

bash shell

0
推荐指数
1
解决办法
7352
查看次数

在bash中的别名内转义单引号

我正在尝试在我的.bashrc文件中设置一个别名,如下所示:

clear && printf '\033[3J'
Run Code Online (Sandbox Code Playgroud)

但是以下方法不起作用

alias clall= "clear && printf \'\033[3J\'"
alias clall= "clear \&\& printf \'\\033\[3J\'"
Run Code Online (Sandbox Code Playgroud)

bash alias escaping

0
推荐指数
1
解决办法
478
查看次数

尝试运行银色搜索器时出现Bash语法错误

我正试图找到$没有遵循的实例!.

这应该必要$,躲过,这是\\$[^!]逃脱这应该是[^\\!]除非[]需要转义呢?对这一点不确定 - 对bash还不够了解.

ag "\\$[^\!]"
bash: ^\!: syntax error: operand expected (error token is "^\!")

ag "\\$[^!]"
bash: !]: event not found

ag "\\$[^\\!]"
bash: ^\\!: syntax error: operand expected (error token is "^\\!")

ag "\\$[\\^\\!]"
bash: \\^\\!: syntax error: operand expected (error token is "\\^\\!")

ag "\\$[\^\!]"
bash: \^\!: syntax error: operand expected (error token is "\^\!")
Run Code Online (Sandbox Code Playgroud)

这些没有结果:

ag "\\$\\[\\^\\!\\]"
ag "\\$\\[\\^\\!\\]" …
Run Code Online (Sandbox Code Playgroud)

regex bash ag

0
推荐指数
1
解决办法
76
查看次数

"test -v $ TESTENV"总是假,即使定义了TESTENV

我在Fedora 27下运行Bash 4.4.19,我有一个简单的脚本:

#!/bin/bash
TESTENV="Hello"
echo "$TESTENV"
if [ -v $TESTENV ]; then
    echo "Yup"
fi
echo "Done"
Run Code Online (Sandbox Code Playgroud)

当我运行它时,它打印:

Hello
./myscript: line 3: [: Hello: binary operator expected
Done
Run Code Online (Sandbox Code Playgroud)

所以,我将额外的括号添加到第3行,现在看起来像:

if [[ -v $TESTENV ]]; then
Run Code Online (Sandbox Code Playgroud)

但产生:

Hello
Done
Run Code Online (Sandbox Code Playgroud)

是什么赋予了?我希望看到上面一个/两个的"Yup".我试过"$TESTENV"用引号括起来,而且我也尝试过-z运算符 - 但行为是一样的.

bash shell if-statement

0
推荐指数
1
解决办法
53
查看次数

为什么hash()方法在Python中使用int返回简短的Hash值?

hash()在Python 3中调用method时,我注意到在使用int数据类型但使用stringtype 时,它不会返回长整数。

这应该这样工作吗?如果确实是这种情况,那么int对于具有短哈希值的类型,由于它太短会不会引起冲突?

for i in [i for i in range(5)]:
    print(hash(i))

print(hash("abc"))
Run Code Online (Sandbox Code Playgroud)

结果:

0
1
2
3
4
4714025963994714141
Run Code Online (Sandbox Code Playgroud)

python hash types

0
推荐指数
1
解决办法
524
查看次数

在脚本的命令行上传递glob,只展开第一个项目

我有以下目录结构,我正在尝试创建一个简单的bash脚本,用模式foo*/scripts/*A.txt打印出所有文件(即foo1/scripts/fileA.txt和foo2/scripts/fileA.txt)

$ tree

.
??? bar
?   ??? scripts
?       ??? fileA.txt
?       ??? fileB.txt
??? bash_scrap.sh
??? foo1
?   ??? scripts
?       ??? fileA.txt
?       ??? fileB.txt
??? foo2
    ??? scripts
        ??? fileA.txt

    ??? fileB.txt
Run Code Online (Sandbox Code Playgroud)

我现在创建一个脚本bash_scrap.sh,我想用第一个命令行参数给出的模式打印所有文件名.

$ cat bash_scrap.sh 
#!/bin/bash
FILES=$1 
for f in $FILES
do
  echo "Processing $f file..."
  printf "\n\n"
done
Run Code Online (Sandbox Code Playgroud)

当我直接定义FILES并在终端中运行脚本时,我得到了预期的输出

$ FILES=foo*/scripts/*A.txt
$ for f in $FILES; do   echo "Processing $f file...";   printf "\n\n"; done
Processing foo1/scripts/fileA.txt file...


Processing foo2/scripts/fileA.txt file...
Run Code Online (Sandbox Code Playgroud)

但是,如果我尝试将此作为带有输入模式的脚本运行,它只打印出第一个文件名.

$ ./bash_scrap.sh foo*/scripts/*A.txt …
Run Code Online (Sandbox Code Playgroud)

bash shell

0
推荐指数
1
解决办法
34
查看次数

为什么在bash 3.2中带有空的右侧的正则表达式匹配为false,而在4.2中为true?

给定两个字符串:

a="hello h" 
b="" 
Run Code Online (Sandbox Code Playgroud)

在bash 4.2版中,其regex比较结果为true

[[ "${a}" =~ "${b}" ]]
echo $?                           # 0
Run Code Online (Sandbox Code Playgroud)

在bash 3.2版中,正则表达式的比较结果为false

[[ "${a}" =~ "${b}" ]]
echo $?                           # 2
Run Code Online (Sandbox Code Playgroud)

编辑:第一个结果在带有4.2.46(2)-发行版bash的linux操作系统上运行,而第二个结果在运行3.2.57(1)-发行版bash的OS Mojave上运行。

bash

0
推荐指数
1
解决办法
39
查看次数

如何将现有 JSON 文件的内容包装为对象的一部分?

由于我对 json 术语不太了解,我举一个例子:

假设我有一个 json:

{

   "var1": "foo",
   "var2": "bar",
   ...
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能jq将其转换为:

{
  "Variables":
  {
      "var1": "foo",
      "var2": "bar",
      ...
  }
}
Run Code Online (Sandbox Code Playgroud)

linux bash json jq

0
推荐指数
1
解决办法
923
查看次数

命令替换在通过 SSH 传递的脚本文本中不起作用

我尝试使用以下内容bash来访问文件夹的内容;

test_dir="/some_dir/dir_test"

ssh -t -t user@remote-host "
if [ -d '$test_dir' ]; then
    sudo chown -R user:admin '$test_dir'
    echo '$test_dir'/*
    if [ '$(ls -A $test_dir)' ]; then
        sudo rm -rf '$test_dir'/*
        echo '$test_dir'/*
fi"
Run Code Online (Sandbox Code Playgroud)

该脚本尝试检查是否/some_dir/dir_test为空,如果不是,则删除该文件夹中的所有文件;但我收到以下错误;

ls: cannot access '/some_dir/dir_test': No such file or directory

/some_dir/dir_test
drwxr-xr-x.  3 sys admin   16 Sep 23 15:03 dir_test
Run Code Online (Sandbox Code Playgroud)

不过,我ssh可以remote-hostls -A /some_dir/dir_test

我想知道如何解决它。

linux ssh bash ls

0
推荐指数
1
解决办法
1452
查看次数

标签 统计

bash ×8

shell ×3

linux ×2

python ×2

ag ×1

alias ×1

escaping ×1

hash ×1

if-statement ×1

jq ×1

json ×1

lambda ×1

ls ×1

regex ×1

ssh ×1

types ×1

variable-assignment ×1