相关疑难解决方法(0)

在shell脚本表达式中,"加冒号"("+:")的含义是什么?

这是什么意思?

if ${ac_cv_lib_lept_pixCreate+:} false; then :
  $as_echo_n "(cached) " >&6
else
  ac_check_lib_save_LIBS=$LIBS
Run Code Online (Sandbox Code Playgroud)

看起来ac_cv_lib_lept_pixCreate是一些变量,所以+:意味着什么?

在哪里学习大括号表达式的完整语法?这个语法的名称是什么?

syntax bash shell

14
推荐指数
3
解决办法
6086
查看次数

在Bash中使用多个表达式if语句

我想重新创建这样的东西

if ( arg1 || arg2 || arg 3) {}
Run Code Online (Sandbox Code Playgroud)

我到目前为止,但我收到以下错误

line 11: [.: command not found

if [ $char == $';' -o $char == $'\\' -o $char == $'\'' ]
then ...
Run Code Online (Sandbox Code Playgroud)

我尝试了不同的方法,但似乎没有人尝试过我试过的一些方法

syntax bash if-statement

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

关键字"if"如何测试值是否为false?

在bash脚本中

if [ 1 ]
then
   echo "Yes"
else
   echo "No"
fi
Run Code Online (Sandbox Code Playgroud)

输出: Yes

它表示'1'被视为真值.

但在代码中:

word = Linux
letter = nuxi
if echo "$word" | grep -q "$letter"
then
    echo "Yes"
else
    echo "No"
fi
Run Code Online (Sandbox Code Playgroud)

输出:没有

但是No会返回1,为什么结果是否

关键字如何echo "$word" | grep -q "$letter"测试命令返回的值后No

bash shell ubuntu

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

Bash中的"[0:命令未找到"

我试图在while循环中获取数组,并且还需要更新数组中的值.

以下是我试过的代码.我收到这个错误[0: command not found

#!/bin/bash
i=0
while [$i -le "{#myarray[@]}" ]
do 
    echo "Welcome $i times"
    i= $(($i+1)))
done
Run Code Online (Sandbox Code Playgroud)

我该如何解决?

syntax bash shell

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

对BASH脚本中的-n选项进行测试始终返回true

我正在编写一个bash脚本,我正在尝试检查是否提供了特定的参数.我注意到一个奇怪的(至少对我而言)[ -n arg ]测试行为.对于以下脚本:

#!/bin/bash

if [ -n $1 ]; then
    echo "The 1st argument is of NON ZERO length"
fi

if [ -z $1 ]; then
    echo "The 1st argument is of ZERO length"
fi
Run Code Online (Sandbox Code Playgroud)

我得到的结果如下:

  1. 没有参数:

    xylodev@ubuntu:~$ ./my-bash-script.sh
    The 1st argument is of NON ZERO length
    The 1st argument is of ZERO length
    
    Run Code Online (Sandbox Code Playgroud)
  2. 带参数:

    xylodev@ubuntu:~$ ./my-bash-script.sh foobar
    The 1st argument is of NON ZERO length
    
    Run Code Online (Sandbox Code Playgroud)

我已经发现$1用双引号括起来给我的结果符合预期,但我仍然想知道为什么当没有使用引号并且没有参数调用脚本时,两个测试都返回true?它似乎$1是null然后,所以[ -n $1 ] …

bash shell sh

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

Shell Script 中 -n、-z、-x、-L、-d 等的含义是什么?

我经常.sh在条件 sintaxis 中的文件Shell Script 中找到这样的:

if [ -n "condition" ]; then ...
if [ -z "condition "]; then ...
if [ -x "condition" ]; then ...
if [ -L "condition" ]; then ...
if [ -d "condition" ]; then ...
Run Code Online (Sandbox Code Playgroud)

这些 -n, -z, -x, -L, -d是函数或者它是如何命名的,它的目的是什么?

linux bash shell

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

最简单的C++/C#/ Java程序员的Shell


我对bash编程有点挣扎,因为我似乎不理解语法规则.例如:

read confirm
if [ "$confirm" == "yes" ]; then
    echo "Thank you for saying yes"
else
    echo "Why did you say no?"
fi
Run Code Online (Sandbox Code Playgroud)

在此代码中,您可以使用许多表单来执行相同的操作:

"$confirm" == "yes"
$confirm == "yes"
"$confirm" == yes
$confirm == yes
Run Code Online (Sandbox Code Playgroud)

那么规则是什么?除此之外,它非常严格,所以如果你在'['和'''之间没有空格的情况下编写上面的if语句,你就会收到错误.所以我的问题是:

  1. 谁能让我对shell脚本中的'基本'语法规则有所了解?如果你愿意,你可以把它称为语法.
  2. 据我所知,有三种不同的shell编程脚本.对于像C++,C#和Java这样的语言程序员来说,哪一个最容易学习?

此致,
拉菲德

unix linux shell

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

如何在bash脚本中正确地将文件名传递给其他程序?

正确处理文件名时,应该在Bash脚本(没有Perl,Python等等)中使用什么成语来为脚本的参数中的另一个程序构建命令行?

通过正确地说,我的意思是处理带有空格或奇数字符的文件名,而不会无意中导致其他程序将它们作为单独的参数处理(或者,<或者> - 或者- 毕竟,如果正确的文件名字符被正确转义则有效- 执行某些操作更糟).

这是我的意思的一个组成例子,在一个不能正确处理文件名的形式中:让我们假设这个脚本()通过采取所有的' foo为命令构建命令行(bar假设在路径中)foo输入参数并将任何看起来像标志的东西移到前面,然后调用bar:

#!/bin/bash
# This is clearly wrong

FILES=
FLAGS=
for ARG in "$@"; do
    echo "foo: Handling $ARG"
    if [ x${ARG:0:1} = "x-" ]; then
        # Looks like a flag, add it to the flags string
        FLAGS="$FLAGS $ARG"
    else
        # Looks like a file, add it to the files string
        FILES="$FILES …
Run Code Online (Sandbox Code Playgroud)

linux bash

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

Bash 分词机制

我是 Bash 新手,我发现 Bash 会自动进行分词:

a="1  2     3 4"
Run Code Online (Sandbox Code Playgroud)

如果我用echo $a我得到的回显“a” 1 2 3 4,它就隐式地进行了分词。如果我循环“a”,我分别得到 1、2、3 和 4。

我还从这里读到

shell 扫描未出现在双引号内的参数扩展、命令替换和算术扩展的结果以进行分词。

我还发现如果我有

b=$a;
echo "$b"
Run Code Online (Sandbox Code Playgroud)

我会得到

"1 2 3 4"
Run Code Online (Sandbox Code Playgroud)

所以,这是我的问题:分词什么时候完成?它会改变字符串本身吗?是不是只有使用echoor for(循环)才生效?

更一般地说,bash 如何处理它?

string bash shell

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

Bash检查显示不存在的文件存在文件?

在bash中运行以下命令:

   stuff=`rpm -ql <some package> | grep dasdasdfd`
Run Code Online (Sandbox Code Playgroud)

(包中不存在的文件,退出代码= 1,标准输出为空)

  if [ -f $stuff ]; then echo "whaaat"; fi
Run Code Online (Sandbox Code Playgroud)

上面的命令检查文件是否存在...但是:

file $stuff
Run Code Online (Sandbox Code Playgroud)

只需打印文件的使用信息......和

stat $stuff
Run Code Online (Sandbox Code Playgroud)

缺少操作数......

有人可以解释一下原因吗?这是一个错误吗?难道我做错了什么?我只是想确保包中的文件出现在fs上

bash

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

Bash function to check if a given variable is set

As explained in this answer, the "right" way to check if a variable is set in bash looks like this:

if [ -z ${var+x} ]; then
    echo "var is unset"
else
    echo "var is set to '$var'"
fi
Run Code Online (Sandbox Code Playgroud)

What I'm interested in is how to extract this into a function that can be reused for different variables.

The best I've been able to do so far is:

is_set() {
  local test_start='[ ! -z ${'
  local test_end='+x} ]'
  local tester=$test_start$1$test_end …
Run Code Online (Sandbox Code Playgroud)

bash

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

Bash中[[-n $ VAR]]和[[$ VAR]]之间的差异

Bash中这两个选项之间是否有区别:

# 1
if [[ "$VAR" ]]; then 

#2
if [[ -n "$VAR" ]]; then 
Run Code Online (Sandbox Code Playgroud)

如果没有,是否有真正需要-n选项的情况?

bash if-statement conditional-statements

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

标签 统计

bash ×11

shell ×7

linux ×3

syntax ×3

if-statement ×2

conditional-statements ×1

sh ×1

string ×1

ubuntu ×1

unix ×1