标签: variable

在脚本中使用“${a:-b}”进行变量赋值

我一直在看其他人写的一些脚本(特别是 Red Hat),他们的很多变量都是使用以下符号分配的 VARIABLE1="${VARIABLE1:-some_val}" 或一些扩展其他变量 VARIABLE2="${VARIABLE2:-`echo $VARIABLE1`}"

使用这种表示法而不是直接声明值有什么意义(例如, VARIABLE1=some_val)有什么意义?

这种表示法是否有好处或可以防止可能出现的错误?

是否:-有特定的含义在这方面?

scripting bash shell-script variable

593
推荐指数
3
解决办法
44万
查看次数

shell 脚本中的变量是否有命名约定?

大多数语言都有变量的命名约定,我在 shell 脚本中看到的最常见的样式是MY_VARIABLE=foo. 这是惯例还是仅适用于全局变量?脚本本地的变量呢?

shell bash shell-script variable

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

如何使用 bash 添加(减去等)两个数字?

我可以读取数字和操作:

echo "First number please"
read num1
echo "Second number please"
read num2
echo "Operation?"
read op
Run Code Online (Sandbox Code Playgroud)

但随后我所有添加数字的尝试都失败了:

case "$op" in
  "+")
    echo num1+num2;;
  "-")
    echo `num1-num2`;;
esac
Run Code Online (Sandbox Code Playgroud)

跑:

First number please
1
Second mumber please
2
Operation?
+
Run Code Online (Sandbox Code Playgroud)

输出:

num1+num2
Run Code Online (Sandbox Code Playgroud)

...或者...

echo $num1+$num2;;

# results in: 1+2    
Run Code Online (Sandbox Code Playgroud)

...或者...

echo `$num1`+`$num2`;;

# results in: ...line 9: 1: command not found
Run Code Online (Sandbox Code Playgroud)

当我尝试添加添加(“2+2”而不是“4”)时,似乎我仍然得到字符串。

scripting bash variable

143
推荐指数
4
解决办法
37万
查看次数

我们如何运行存储在变量中的命令?

$ ls -l /tmp/test/my\ dir/
total 0
Run Code Online (Sandbox Code Playgroud)

我想知道为什么以下运行上述命令的方法失败或成功?

$ abc='ls -l "/tmp/test/my dir"'

$ $abc
ls: cannot access '"/tmp/test/my': No such file or directory
ls: cannot access 'dir"': No such file or directory

$ "$abc"
bash: ls -l "/tmp/test/my dir": No such file or directory

$ bash -c $abc
'my dir'

$ bash -c "$abc"
total 0

$ eval $abc
total 0

$ eval "$abc"
total 0
Run Code Online (Sandbox Code Playgroud)

shell bash quoting variable

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

如何检查“if”语句中是否存在变量?

我需要在if语句中检查变量是否存在。有以下作用:

if [ -v $somevar ]
then
    echo "Variable somevar exists!"
else
    echo "Variable somevar does not exist!"
Run Code Online (Sandbox Code Playgroud)

与此最接近的问题是this,它实际上并没有回答我的问题。

bash test variable

98
推荐指数
4
解决办法
25万
查看次数

如何将命令的输出分配给 shell 变量?

我想将表达式的结果(即命令的输出)分配给一个变量,然后对其进行操作——例如,将它与一个字符串连接起来,然后回显它。这是我所拥有的:

#!/bin/bash
cd ~/Desktop;
thefile= ls -t -U | grep -m 1 "Screen Shot";
echo "Most recent screenshot is: "$thefile;
Run Code Online (Sandbox Code Playgroud)

但是输出:

Screen Shot 2011-07-03 at 1.55.43 PM.png
Most recent screenshot is: 
Run Code Online (Sandbox Code Playgroud)

因此,它看起来没有分配给$thefile,并且在执行时正在打印。

我错过了什么?

bash io-redirection shell-script variable

95
推荐指数
3
解决办法
32万
查看次数

缩进时如何将字符串值分配给多行的变量?

问题:

  1. 我需要为一个变量分配一个相当长的值。
  2. 我的脚本的所有行都必须在一定数量的列下。

所以,我试图使用多条线来分配它。

没有缩进很简单:

VAR="This displays without \
any issues."
echo "${VAR}"
Run Code Online (Sandbox Code Playgroud)

结果:

This displays without any issues.
Run Code Online (Sandbox Code Playgroud)

但是有缩进:

    VAR="This displays with \
    extra spaces."
    echo "${VAR}"
Run Code Online (Sandbox Code Playgroud)

结果:

This displays with      extra spaces.
Run Code Online (Sandbox Code Playgroud)

如果没有这些空格,我如何优雅地分配它?

variable

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

将 shell 变量作为 /pattern/ 传递给 awk

在我的 shell 函数之一中具有以下内容:

function _process () {
  awk -v l="$line" '
  BEGIN {p=0}
  /'"$1"'/ {p=1}
  END{ if(p) print l >> "outfile.txt" }
  '
}
Run Code Online (Sandbox Code Playgroud)

,所以当被称为 as 时_process $arg$arg会被传递为$1,并用作搜索模式。它是这样工作的,因为 shell 扩展$1代替了 awk 模式!也l可以在 awk 程序中使用,用-v l="$line". 一切都很好。

是否可以以相同的方式将模式作为变量进行搜索?

以下将不起作用,

awk -v l="$line" -v search="$pattern" '
  BEGIN {p=0}
  /search/ {p=1}
  END{ if(p) print l >> "outfile.txt" }
  '
Run Code Online (Sandbox Code Playgroud)

, 因为 awk 不会解释/search/为变量,而是按字面意思解释。

shell awk quoting variable

71
推荐指数
3
解决办法
11万
查看次数

在 bash 脚本中,declare 和普通变量有什么不同?

在 bash 脚本中:

我们通过命名来创建变量:

abc=ok
Run Code Online (Sandbox Code Playgroud)

或者我们可以使用 declare

declare abc=ok
Run Code Online (Sandbox Code Playgroud)

有什么不同?

为什么 bash 有这么多方法来创建变量?

bash shell-script variable

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

将退出代码分配给 shell 局部变量

#!/bin/bash
function0()
{
 local t1=$(exit 1)
 echo $t1
}

function0
Run Code Online (Sandbox Code Playgroud)

echo打印空值。我期望:

1
Run Code Online (Sandbox Code Playgroud)

为什么t1变量没有被分配退出命令的返回值 - 1

shell bash command-substitution variable

60
推荐指数
3
解决办法
12万
查看次数