标签: dash-shell

子shell中的循环控制

我想使用子外壳来确保环境更改不会影响循环中的不同迭代,但我不确定我可以在子外壳内使用循环控制语句 ( break, continue):

#!/bin/sh
export A=0
for i in 1 2 3; do
  (
  export A=$i
  if [ $i -eq 2 ]; then continue ; fi
  echo $i
  )
done
echo $A
Run Code Online (Sandbox Code Playgroud)

A循环外的值不受内部发生的任何影响,这没关系。但是允许使用continue子外壳内部还是应该将其移到外部?作为记录,它可以按原样工作,但也许这是一个不可靠的副作用。

bash dash-shell

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

在没有 Bashisms 的 Shell 中检查子字符串

我正在尝试编写一个 shell 脚本,在其中我必须查找字符串中是否存在-32 。不幸的是,我必须在不使用任何 bashism 的情况下执行此操作,因为它必须在运行 Dash 的计算机上运行。

我尝试过case ${1+"$@"} in *-32*);;,但这会得到类似-321的东西。有没有办法使用正则表达式或其他东西来查找该标志?它周围可以有其他标志,并在字符串中用空格分隔。

我认为我需要的正则表达式会查找 -32 ,后面带有空格或行尾。-32(\s|$)

我对正则表达式很陌生,所以我不确定这是否是最好的方法。任何帮助,将不胜感激!

谢谢!

regex linux shell dash-shell

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

如何判断dash的版本号?

我有一个破折号外壳安装为/bin/dash. 我查了dash的手册,和POSIX shell的手册是一样的,没有说shell的版本。

破折号 --version

不起作用。

如何告诉我有破折号的版本号?

补充:有些人指着我使用 Ubuntu 命令,好吧,不,我不是在运行 Ubuntu,我在运行 Centos。

linux centos dash-shell

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

回归:导出的 Bash 函数经过另一个过程后丢失

从 Ubuntu 14.04 迁移到 16.04 时,我注意到我的几个 Bash 脚本由于缺少导出的函数而失败。我想知道这是否与Shellshock 错误的修复有关,即使我只是简单export -f的函数,而不是依赖 Bash 内部函数表示。失败不会发生在直接的 Bash 子 shell 中,只有在两者之间有另一个进程时才会发生。例如,Bash 调用 awk / Perl / Vim 调用另一个 Bash。下面是一个 Perl 的例子:

好的

$ foo() { echo "foobar"; }
$ export -f foo
$ export -f; foo
foo ()
{
    echo "foobar"
}
declare -fx foo
foobar
$ bash -c "export -f; foo"
foo ()
{
    echo "foobar"
}
declare -fx foo
foobar
$ perl -e 'system("bash -c \"export -f; foo\"")'
foo …
Run Code Online (Sandbox Code Playgroud)

bash shellshock-bash-bug dash-shell

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

`dash`是否支持`bash`样式数组?

dashshell环境中,我希望将字符串拆分为数组.以下代码适用bash但不适用dash.

IFS=""
var="this is a test|second test|the quick brown fox jumped over the lazy dog"
IFS="|"
test=( $var )
echo ${test[0]}
echo ${test[1]}
echo ${test[2]}
Run Code Online (Sandbox Code Playgroud)

我的问题

是否dash支持此样式的数组.如果没有,是否有任何建议将此解析为另一种类型的变量而不使用循环?

linux dash-shell

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

如何识别脚本中是否使用了bash或破折号?

我正在编写bash脚本,在Ubuntu中使用“ sh”命令时会引发错误(似乎与破折号不兼容,我正在学习此主题)。因此,我想检测是否使用破折号而不是bash引发错误。

如何在脚本上下文中检测到它?可能吗?

bash dash-shell

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

如何找到在 dash 中来源的脚本的路径?

我试图让一个源 shell 脚本确定它自己的位置,我发现这对于 dash 来说是一项艰巨的任务。

在 bash、sh 和 csh 中,我可以使用:$_

在鱼中,我可以使用(status -f).

总的来说,我没有运气......

我尝试获取如下所示的 path.sh 文件,结果如下:

# path.sh
called=$_
echo called:      $called
echo underscore:  $_
echo zero:        $0
echo dash_source: $DASH_SOURCE
echo bash_source: $BASH_SOURCE
Run Code Online (Sandbox Code Playgroud)

dash -c ". path.sh"

输出:

called:      /usr/local/bin/dash
underscore:  /usr/local/bin/dash
zero:        dash
dash_source:
bash_source:
Run Code Online (Sandbox Code Playgroud)

如何在破折号中获取path.sh的路径?

unix shell dash-shell

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

"bash -c"与"dash -c"

dash -c行为与以下不同bash -c:

docker run -it ubuntu /bin/dash -c ps
  PID TTY          TIME CMD
    1 ?        00:00:00 sh
    7 ?        00:00:00 ps

docker run -it ubuntu /bin/bash -c ps
  PID TTY          TIME CMD
    1 ?        00:00:00 ps
Run Code Online (Sandbox Code Playgroud)

这种差异有解释吗?

bash ubuntu dash-shell

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

如何在POSIX shell脚本中迭代字符串的字符?

符合POSIX的shell应提供这样的机制来迭代字符串集合:

for x in $(seq 1 5); do
    echo $x
done
Run Code Online (Sandbox Code Playgroud)

但是,如何迭代单词的每个字符?

shell posix sh dash-shell

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

为什么阅读在bash和dash中表现不同?

这是尝试找出read实用程序如何在多个shell中工作.发现差异对我来说似乎是个错误.

结果是破折号保留尾随空格,显示为:

dash: <a b     >
bash: <a b>
Run Code Online (Sandbox Code Playgroud)

简而言之:为什么这个代码在bash和dash读取中表现不同?

dash -c 'echo "    a b     " | { read var; echo "<$var>"; }'
bash -c 'echo "    a b     " | { read var; echo "<$var>"; }'
Run Code Online (Sandbox Code Playgroud)

bash shell built-in dash-shell

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

标签 统计

dash-shell ×10

bash ×5

shell ×4

linux ×3

built-in ×1

centos ×1

posix ×1

regex ×1

sh ×1

shellshock-bash-bug ×1

ubuntu ×1

unix ×1