相关疑难解决方法(0)

更正Bash和shell脚本变量大小写

我遇到了许多带有变量的shell脚本,我一直认为存在严重的误解.我的理解是,按照惯例(也许很久以前就必须),环境变量都是全部的.

但是在像Bash这样的现代脚本环境中,我总是倾向于使用临时变量的小写名称约定,而仅为导出(即环境)变量使用大写的约定.例如:

#!/usr/bin/env bash
year=`date +%Y`
echo "It is $year."
export JAVA_HOME="$HOME/java"
Run Code Online (Sandbox Code Playgroud)

这一直是我对事物的看法.是否有任何权威来源同意或不同意这种方法,还是纯粹是风格问题?

bash shell scripting naming-conventions capitalization

171
推荐指数
5
解决办法
5万
查看次数

将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万
查看次数

如何将数组转换为逗号分隔的字符串?

我有一个数组,我正在像这样打印它:

echo "${data[*]}"
Run Code Online (Sandbox Code Playgroud)

输出:

/QE-CI-RUN-71/workspace/QE-AU/57/testng-results_1.xml 
/QE-CI-RUN-71/workspace/QE-AU/57/testng-results_2.xml
Run Code Online (Sandbox Code Playgroud)

我想将上述输出存储为逗号分隔值。我怎样才能在 Bash 中实现这一目标?

数据数组是动态的,它可以有任意数量的值。

arrays bash shell

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

将bash数组传递给python列表

我正在尝试使用旧的getenv方法将数组从bash传递给python但是我一直收到此错误:

./crcFiles.sh: line 7: export: `0021': not a valid identifier
Traceback (most recent call last):
  File "/shares/web/vm3618/optiload/prog/legalLitres.py", line 30, in <module>
    for i in mdcArray.split(' '):
AttributeError: 'NoneType' object has no attribute 'split'
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么$ mdcNo没有成功从bash传递到python吗?

代码.sh:

#!/bin/bash

mdcNo=('0021' '0022' '0036' '0055' '0057' '0059' '0061' '0062' '0063' '0065' '0066' '0086' '0095' '0098' '0106' '0110' '0113' '0114' '0115' '0121' '0126' '0128' '0135' '0141' '0143' '0153' '0155' '0158')

localDIR=/shares/web/vm3618/optiload/prog

export mdcNo

$localDIR/legalLitres.py


for i in "${mdcNo[@]}"
do
echo $i
cp $localDIR/MDC$i/*/QqTrkRec.txt $localDIR/crccalc/.
cd …
Run Code Online (Sandbox Code Playgroud)

python linux arrays bash

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

根据从另一个文件中选择的标题从文件中提取列

我有以下要在awk中解决的问题。我有一个大的文本表,用逗号分隔,由100k行和5k cols组成。第一行是标题,第一列是记录ID。然后,我有了第二个文本文件,其中包含第一个文件中标头的子集。我想提取第一个文件的所有列,其标题包含在第二个文件中给出的列表中。这里是输入和所需输出的示例:

数据文件

   ID, head1, head2, head3, head4  
    1, 25.5, 1364.0, 22.5, 13.2  
    2, 10.1, 215.56, 1.15, 22.2  
Run Code Online (Sandbox Code Playgroud)

列表文件

head1  
head4  
Run Code Online (Sandbox Code Playgroud)

所需的输出:

ID, head1, head4  
1, 25.5, 13.2  
2, 10.1, 22.2
Run Code Online (Sandbox Code Playgroud)

任何人都可以给我一些有关如何以awk或通过unix脚本解决此问题的建议吗?在此先感谢您的帮助!

unix awk

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

仅列出文件的公共父目录

我正在搜索一个文件,比如"file1.txt",并且find命令的输出如下所示.

/home/nicool/Desktop/file1.txt
/home/nicool/Desktop/dir1/file1.txt
/home/nicool/Desktop/dir1/dir2/file1.txt
Run Code Online (Sandbox Code Playgroud)

在上面的例子中我只想要共同的父目录,在上面的例子中是"/ home/nicool/Desktop".如何使用bash实现?请帮助找到这种问题的一般解决方案.

linux bash shell

5
推荐指数
1
解决办法
129
查看次数

为什么这个 Bash 脚本没有继承所有的环境变量?

我正在尝试一些非常简单的事情:

PEOPLE=(
  "nick"
  "bob"
)
export PEOPLE="$(IFS=, ; echo "${PEOPLE[*]}")"
echo "$PEOPLE"  # prints 'nick,bob'
./process-people.sh
Run Code Online (Sandbox Code Playgroud)

出于某种原因,process-people.sh没有看到$PEOPLE. 就像,如果 I echo "$PEOPLE"from inside process-people.sh,它会打印一个空行。

据我了解,通过调用创建的子进程./process-people.sh应该继承父进程的所有环境变量,包括$PEOPLE. 然而,我在 Bash 3.2.57(1)-release 和 4.2.46(2)-release 上都试过这个,但它不起作用。

这里发生了什么?

bash

5
推荐指数
1
解决办法
3807
查看次数

对混合数据数组进行排序

假设我有一个这样的数据数组:

arr[0] = "someText1 (x,y,z) a"
arr[1] = "someText2 (x,y,z) b"
Run Code Online (Sandbox Code Playgroud)

如何使用Bash按字典顺序排列此数组[仅考虑文本]?

arrays bash

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

带有逗号和单引号的Concat数组元素-Bash

如何在Bash中使用单引号和逗号转换数组元素。

arr=("element1" "element2" "element3")
#element1 element2 element3
Run Code Online (Sandbox Code Playgroud)

所需结果 'element1','element2','element3'

根据Martin Clayton的答案,使用IFS可以得到逗号分隔的值,

SAVE_IFS="$IFS"
IFS=","
ARRJOIN="${arr[*]}"
IFS="$SAVE_IFS"

echo "$ARRJOIN"
#element1,element2,element3
Run Code Online (Sandbox Code Playgroud)

但是如何在每个元素上添加单引号。

arrays bash ifs

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

在Python中生成IP范围

如果我输入IP" 127 ":我想生成从127.0.0.1127.255.255.255的所有内容


如果我输入IP" 127.0 ",我想生成从127.0.0.1127.0.255.255的所有内容


如果我输入IP" 127.0.0 ",我想生成从127.0.0.1127.0.0.255的所有内容


使用netaddr

python

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