相关疑难解决方法(0)

从一个文件中删除另一个文件中的行

我有一个文件f1:

line1
line2
line3
line4
..
..
Run Code Online (Sandbox Code Playgroud)

我想删除另一个文件中的所有行f2:

line2
line8
..
..
Run Code Online (Sandbox Code Playgroud)

我想的东西catsed,这甚至还没有接近我所预期的.我怎样才能做到这一点?

bash scripting sh

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

Bash shell中$ {var},"$ var"和"$ {var}"之间有什么区别?

标题是什么:将变量封装在{},""或者"{}" 是什么意思?"我无法在网上找到任何关于此的解释 - 除了使用符号之外我还没有能够引用它们不产生任何东西.

这是一个例子:

declare -a groups

groups+=("CN=exampleexample,OU=exampleexample,OU=exampleexample,DC=example,DC=com")
groups+=("CN=example example,OU=example example,OU=example example,DC=example,DC=com")
Run Code Online (Sandbox Code Playgroud)

这个:

for group in "${groups[@]}"; do
    echo $group
done
Run Code Online (Sandbox Code Playgroud)

证明与此有很大不同:

for group in $groups; do
    echo $group
done
Run Code Online (Sandbox Code Playgroud)

还有这个:

for group in ${groups}; do
    echo $group
done
Run Code Online (Sandbox Code Playgroud)

只有第一个完成我想要的东西:遍历数组中的每个元素.我不是之间的差异是很清楚$groups,"$groups",${groups}"${groups}".如果有人能解释,我会很感激.

作为一个额外的问题 - 是否有人知道引用这些封装的可接受方式?

variables syntax bash shell

114
推荐指数
3
解决办法
7万
查看次数

如何在Linux中的变量中存储命令?

我想存储一个命令,以便稍后在变量中使用(不是命令的输出,而是命令本身)

我有一个简单的脚本如下:

command="ls";
echo "Command: $command"; #Output is: Command: ls

b=`$command`;
echo $b; #Output is: public_html REV test... (command worked successfully)
Run Code Online (Sandbox Code Playgroud)

但是,当我尝试更复杂的东西时,它会失败.例如,如果我做

command="ls | grep -c '^'";
Run Code Online (Sandbox Code Playgroud)

输出是:

Command: ls | grep -c '^'
ls: cannot access |: No such file or directory
ls: cannot access grep: No such file or directory
ls: cannot access '^': No such file or directory
Run Code Online (Sandbox Code Playgroud)

知道如何在变量中存储这样的命令(使用管道/多个命令)供以后使用吗?

linux variables bash command

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

试图在bash中的变量中嵌入换行符

我有

var="a b c"
for i in $var
do
   p=`echo -e $p'\n'$i`
done
echo $p
Run Code Online (Sandbox Code Playgroud)

我想要打印最后一个回声

a
b
c
Run Code Online (Sandbox Code Playgroud)

请注意,我希望变量p包含换行符.我怎么做?

linux bash

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

如何将变量的值传递给命令的stdin?

我正在编写一个应该有点安全的shell脚本,即不通过命令参数传递安全数据,最好不使用临时文件.如何将变量传递给命令的stdin?或者,如果不可能,如何正确使用临时文件进行此类任务?

security bash stdin

91
推荐指数
7
解决办法
7万
查看次数

我刚刚分配了一个变量,但echo $ variable显示了其他内容

以下是一系列echo $var可以显示与刚刚分配的值不同的值的情况.无论指定的值是"双引号","单引号"还是不引用,都会发生这种情况.

如何让shell正确设置我的变量?

星号

预期的输出是/* Foobar is free software */,但我得到一个文件名列表:

$ var="/* Foobar is free software */"
$ echo $var 
/bin /boot /dev /etc /home /initrd.img /lib /lib64 /media /mnt /opt /proc ...
Run Code Online (Sandbox Code Playgroud)

方括号

期望值是[a-z],但有时我会得到一个字母!

$ var=[a-z]
$ echo $var
c
Run Code Online (Sandbox Code Playgroud)

换行(换行符)

预期值是一个单独的行列表,但所有值都在一行!

$ cat file
foo
bar
baz

$ var=$(cat file)
$ echo $var
foo bar baz
Run Code Online (Sandbox Code Playgroud)

多个空间

我期望一个精心对齐的表头,但是多个空格要么消失要么折叠成一个!

$ var="       title     |    count"
$ echo $var
title | count
Run Code Online (Sandbox Code Playgroud)

标签

我期望两个制表符分隔值,但我得到两个空格分隔值!

$ …
Run Code Online (Sandbox Code Playgroud)

bash shell sh quoting

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

读取行循环后的Shell脚本在第一行后停止

我有以下shell脚本.目的是循环到目标文件的每一行(其路径是脚本的输入参数)并对每一行进行操作.现在,它似乎只适用于目标文件中的第一行,并在该行被处理后停止.我的剧本有什么问题吗?

#!/bin/bash
# SCRIPT: do.sh
# PURPOSE: loop thru the targets 

FILENAME=$1
count=0

echo "proceed with $FILENAME"

while read LINE; do
   let count++
   echo "$count $LINE"
   sh ./do_work.sh $LINE
done < $FILENAME

echo "\ntotal $count targets"
Run Code Online (Sandbox Code Playgroud)

do_work.sh,我运行了几个ssh命令.

ssh bash shell while-loop

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

OS X的Bash脚本绝对路径

我试图获取OS X上当前运行脚本的绝对路径.

我看到很多回复readlink -f $0.但是,由于OS X readlink与BSD相同,它只是不起作用(它适用于GNU的版本).

有没有开箱即用的解决方案?

macos bash path

85
推荐指数
10
解决办法
6万
查看次数

如何在Bash中用引号字符串保留换行符?

我正在创建一个脚本来自动创建apache虚拟主机.我的部分脚本是这样的:

MYSTRING="<VirtualHost *:80>

ServerName $NEWVHOST
DocumentRoot /var/www/hosts/$NEWVHOST

...

"
echo $MYSTRING
Run Code Online (Sandbox Code Playgroud)

但是,脚本中的换行符将被忽略.如果我回显字符串,就会吐出一行.

如何确保打印换行符?

bash

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

如何在Bash中对字符串中的每个字符执行for循环?

我有一个像这样的变量:

words="??????"
Run Code Online (Sandbox Code Playgroud)

我想打一个for循环的每个字符,一次一个,例如第一的character="?",那么character="?",character="?"

我知道的唯一方法是将每个字符输出到文件中的单独行,然后使用while read line,但这似乎非常低效.

  • 如何通过for循环处理字符串中的每个字符?

bash for-loop

66
推荐指数
9
解决办法
10万
查看次数

标签 统计

bash ×10

shell ×3

linux ×2

sh ×2

variables ×2

command ×1

for-loop ×1

macos ×1

path ×1

quoting ×1

scripting ×1

security ×1

ssh ×1

stdin ×1

syntax ×1

while-loop ×1