我正在阅读Steven Lott撰写的《 Functional Python Programming》,这是一本关于“功能性”地使用Python而不是以面向对象的方式使用的书,其中大部分示例着重于探索性数据分析。
洛特说Lamda不能有赋值语句。但是在同一页面上,他为变量分配了一个lambda函数:
>>mersenne = lambda x: 2**x-1
>>mersenne(17)
131071
Run Code Online (Sandbox Code Playgroud)
那怎么不是任务陈述呢?我还缺少其他“分配”的感觉吗?
我有一个 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]?因此,我无法比较它们。我什么都想不通......
我正在尝试在我的.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还不够了解.
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) 我在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运算符 - 但行为是一样的.
当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) 我有以下目录结构,我正在尝试创建一个简单的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) 给定两个字符串:
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上运行。
由于我对 json 术语不太了解,我举一个例子:
假设我有一个 json:
{
"var1": "foo",
"var2": "bar",
...
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能jq将其转换为:
{
"Variables":
{
"var1": "foo",
"var2": "bar",
...
}
}
Run Code Online (Sandbox Code Playgroud) 我尝试使用以下内容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-host和ls -A /some_dir/dir_test。
我想知道如何解决它。