小编ilk*_*chu的帖子

在 bash 中,所有变量都作为字符串存储在内存中吗?

假设我创建了以下变量:

s=John
i=12345
f=3.14
Run Code Online (Sandbox Code Playgroud)

所有这些变量都是作为字符串存储在内存中的,还是bash有其他数据类型?

bash

14
推荐指数
2
解决办法
3509
查看次数

!cp:$ 有什么作用?

我在我工作中的一个程序的文档中看到了这个命令:

cp company-sso /usr/local/bin/company-sso ; sudo chmod +x !cp:$
Run Code Online (Sandbox Code Playgroud)

我知道这:会阻止执行下一个命令,它只会被评估,但这如何工作$?我只见过$在变量名之前使用过,例如$USERor$HOME但从来没有单独使用过。还有,怎么操作!cp?不会执行cp?这样做的目的是什么?这整条线有意义吗?

shell bash shell-script file-copy

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

使用 echo 命令回车

我正在练习带有选项\r(回车)的echo 命令,如下所示。

echo -e "This is \r my college"
Run Code Online (Sandbox Code Playgroud)

输出:

 my college
Run Code Online (Sandbox Code Playgroud)

但是当我在\r下面再添加一个词时

echo -e "This is the \r my college"
Run Code Online (Sandbox Code Playgroud)

然后它给了我这样的输出:

 my college the
Run Code Online (Sandbox Code Playgroud)

另一个例子

echo -e "This is \r valid data"
 valid data

echo -e "This is not a \r valid data"
 valid data a
Run Code Online (Sandbox Code Playgroud)

所以,我想知道这里回车的实际目的是什么?

shell echo newlines

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

为什么不使用带有 || 的多个命令 或&& 有条件的工作?

这适用于 shell (bash, dash) 提示:

[ -z "" ] && echo A || echo B
A
Run Code Online (Sandbox Code Playgroud)

但是,我正在尝试编写一个POSIX shell 脚本,它是这样开始的:

#!/bin/sh

[ "${#}" -eq 1 ] || echo "Invalid number of arguments, expected one."; exit 1

readonly raw_input_string=${1}

[ -z "${raw_input_string}" ] && echo "The given argument is empty."; exit 1
Run Code Online (Sandbox Code Playgroud)

我不知道为什么,但我没有收到消息

给定的参数为空。

如果我这样调用脚本:

./test_empty_argument ""
Run Code Online (Sandbox Code Playgroud)

这是为什么?

shell-script arguments

13
推荐指数
3
解决办法
3100
查看次数

使用 `select` 命令在 Bash 中打印菜单

我正在尝试使用该select命令实现一个简单的菜单。脚本(用于测试目的)如下:

#!/bin/bash
echo "*******************"
PS3='Select an option and press Enter: '
options=("apache" "named" "sendmail")
select opt in "${options[@]}"
do
  case $opt in
        "apache")
          date
          ;;
        "named")
          echo "test"
          ;;
        "sendmail")
          echo "test 2"
          ;;
        *) echo "invalid option";;
  esac
done
echo "*********************"
Run Code Online (Sandbox Code Playgroud)

该脚本无法识别我提供的任何有效输入,并始终打印“无效选项”消息。这个脚本做错了什么?

bash shell-script select

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

哪些(Bash)shell 特殊参数/变量是?

我在 Bash 中发现了一些以$符号开头的特殊参数。例如:当我徘徊退出状态我知道$?,进程ID $$

所以,我分享 这篇文章是为了了解哪些是特殊的 bash(shell)参数及其用法。

shell bash parameter

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

我可以在 Bash 括号扩展中使用变量吗?

以下是我要完成的某种伪代码:

#!/bin/bash

# I already have the variable below figured out (positive integer):
numlines=$([returns number of lines containing specific characters in a file])

# This is basically what I want to do with it:
for i in {1..$numlines}; do
    # the part below is already figured out as well:        
    do some other stuff
done
Run Code Online (Sandbox Code Playgroud)

通过在“{1..n}”序列中插入实际数字,我可以从命令行很好地执行它。我只需要知道是否可以在这里包含一个变量以及如何去做。

  • 我试过export
  • 我尝试将变量本身放在序列内的花括号中: {1..${numlines}}
  • 我试过把它放在双引号中,希望它能扩展: {1.."$numlines"}
  • 我试过逃避${1..\$numlines}

我是否需要使用set -[something]命令才能扩展此变量?我什至尝试过某些形式的使用eval...都无济于事。

我只需要知道我是否遗漏了一些简单或晦涩的东西,或者在我浪费时间之前这是否可能。

我可以拼凑出一种非常非常hackish 的方式来让它根据需要工作,但如果可能的话,我想避免这种情况,并学习正确的方法来做这件事。

scripting bash shell-script

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

检查命令行参数

我想检查第一个命令行参数 ( $1) 是否至少有 10 个字符,以及它是否为空。

该脚本被称为:

./myscript.sh 2018-08-14
Run Code Online (Sandbox Code Playgroud)

我试过这个,但它不起作用

timestamp="$1"

# check if command line argument is empty or not present
if [ "$1" == "" ] || [ $# -gt 1 ]; then
        echo "Parameter 1 is empty"
        exit 0
elif [! "${#timestamp}" -gt 10 ]; then
        echo "Please enter at least a valid date"
        echo "Example: 2018-08-14"
        exit 0
else
        echo "THIS IS THE VALID BLOCK"
fi
Run Code Online (Sandbox Code Playgroud)

shell bash command line

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

PS1='\\ $ ' 和 PS1='\\\\ $ ' 在 bash 中是相同的

在这两种情况下,和 都会PS1='\\ $ 'PS1='\\\\ $ '视觉上产生相同的提示。\ $

为什么?这是一个错误还是记录的行为?

在 bash 5.2.021 和 dash 0.5.12 上测试。我只在 bash 中观察到它,但在 dash 中没有观察到。

shell bash prompt

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

's=.*/==' 在 sed 中有什么作用?

sed 's=.*/=='在 sh 脚本的上下文中看到了,我很困惑。我在 sed 手册或网络搜索(for sed s=)中找不到如何s使用,而不是s///. 除了s我在这里只看到一个潜在的命令=(打印当前输入行号),但在这种情况下,其余的在做什么......

在 shell 中运行命令会产生与 eg 的输入相同的输出echo 'jkfdsa=335r34',而echo 'jkfdsa=335r34' | sed 's/=.*/==/'根据手册进行替换。也稍微修改 command 为 eg echo 'jkfdsa=3' | sed 's798=.*/==/'given
sed: -e expression #1, char 11: unterminated 's' command,所以 original 应该有一些正确的含义。它是什么?

sed

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