标签: variable

shell 命令输出中的字符数

我正在编写一个脚本,它需要一步计算命令输出中的字符数。

例如,使用该命令readlink -f /etc/fstab应该返回,10因为该命令的输出长度为 10 个字符。

这已经可以使用以下代码存储变量:

variable="somestring";
echo ${#variable};
# 10
Run Code Online (Sandbox Code Playgroud)

不幸的是,对命令生成的字符串使用相同的公式不起作用:

${#(readlink -f /etc/fstab)};
# bash: ${#(readlink -f /etc/fstab)}: bad substitution
Run Code Online (Sandbox Code Playgroud)

我知道可以通过首先将输出保存到变量来做到这一点:

variable=$(readlink -f /etc/fstab);
echo ${#variable};
Run Code Online (Sandbox Code Playgroud)

但我想删除额外的步骤。

这可能吗?最好仅使用内置或标准实用程序与 Almquist shell (sh) 兼容。

shell string variable

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

变量如何使用“~”进行 cd'ing?

如何使用变量 -$BASE在我的 cd 中。我尝试了以下操作,但出现错误

$ cd ~/z/repo_1_ruby_193/
23:23:57 durrantm Castle2012 /home/durrantm/z/repo_1_ruby_193 

$ BASE="~/z"
23:24:03 durrantm Castle2012 /home/durrantm/z/repo_1_ruby_193 

$ cd $BASE/repo_1_ruby_193
-bash: cd: ~/z/repo_1_ruby_193: No such file or directory
23:24:25 durrantm Castle2012 /home/durrantm/z/repo_1_ruby_193 
Run Code Online (Sandbox Code Playgroud)

shell bash cd-command quoting variable

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

感叹号变量`$!`

我一直在为我的 Unix 考试而学习,我经常看到感叹号变量 -$! 如果我echo $!在 Mac shell 上写下诸如“你有邮件……”之类的信息

这样做的目的是存储我是否有任何邮件或还有其他东西吗?

编辑:有趣的巧合发生了。就在我写echo $!我的 Shell 时,也通知我我有一些邮件。所以这就是我写邮件部分的原因。

shell environment-variables variable

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

如何理解“echo $-”的输出?

如何理解输出echo $-?它看起来像某种标志字符。我无法通过谷歌搜索得到线索。

bash variable

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

通过单词反转变量的内容

所以如果我有一个变量

VAR='10 20 30 40 50 60 70 80 90 100'
Run Code Online (Sandbox Code Playgroud)

并呼应出来

echo "$VAR"
10 20 30 40 50 60 70 80 90 100
Run Code Online (Sandbox Code Playgroud)

但是,在脚本的进一步下方,我需要颠倒此变量的顺序,以便它显示为类似

echo "$VAR" | <code to reverse it>
100 90 80 70 60 50 40 30 20 10
Run Code Online (Sandbox Code Playgroud)

我尝试使用 rev 并且它实际上颠倒了一切,所以它出来了

echo "$VAR" | rev
001 09 08 07 06 05 04 03 02 01
Run Code Online (Sandbox Code Playgroud)

linux shell bash variable

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

如何将空的 JSON 大括号作为默认值回显?

{}如果缺少 envvar,我似乎无法得到一个空的 JSON来回显。}如果设置,我要么在输出中有尾随,要么显示转义。

bash-3.2$ unset X
bash-3.2$ echo "${X:-{}}"
{}
bash-3.2$ X=y
bash-3.2$ echo "${X:-{}}"
y}
bash-3.2$ echo "${X:-{\}}"
y
bash-3.2$ unset X
bash-3.2$ echo "${X:-{\}}"
{\}
bash-3.2$ echo "${X:-'{}'}"
'{}'
bash-3.2$ X=z
bash-3.2$ echo "${X:-'{}'}"
z
Run Code Online (Sandbox Code Playgroud)

我如何正确逃脱它?

bash variable

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

是否可以使用shell脚本打印变量内容的内容?(间接引用)

假设我已经声明了以下变量:

$ var='$test'
$ test="my string"
Run Code Online (Sandbox Code Playgroud)

如果我打印它们的内容,我会看到以下内容:

$ echo $var
$test

$ echo $test
my string
Run Code Online (Sandbox Code Playgroud)

我想找到一种方法来打印内容的内容$var(即 的内容$test)。所以我尝试执行以下操作:

$ echo $(echo $var)
$test
Run Code Online (Sandbox Code Playgroud)

但这里的结果是$test而不是"my string"......是否可以使用bash打印变量内容的内容?

bash shell-script echo variable-substitution variable

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

Makefile:已设置但具有空值的变量的默认值

我有一个 Makefile,它有一个变量,如果变量未设置或设置但具有空值,则该变量需要具有默认值。

我怎样才能做到这一点?

我需要这个,因为我在 shell 脚本中调用 make 并且 makefile 所需的值可以作为 $1 从 shell 传递。并将其传递给 makefile,我必须将其设置在 bash-script 中。


想法:(不优雅)在 bash 脚本内部,可以检查变量是否已设置但具有空值,在这种情况下可以取消设置。


片段

注意:如果变量未在终端中定义,以下将不起作用,因为它们是在 bash 脚本中设置的。

生成文件

dSourceP?=$(shell pwd)
Source?=$(notdir $(wildcard $(dSourceP)/*.md))
Run Code Online (Sandbox Code Playgroud)

Bash 脚本

make all dSourceP="${1}" Source="${2}"
Run Code Online (Sandbox Code Playgroud)

终端

bash ./MyScript.sh
bash ./MyScript.sh /home/nikhil/MyDocs
bash ./MyScript.sh /home/nikhil/MyDocs index.md
Run Code Online (Sandbox Code Playgroud)

bash make shell-script gnu-make variable

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

如何将管道( | )存储在变量中?

这个想法是将它用作...命令中的管道。例如:假设有某种很长的路径必须一次又一次地重新输入,然后是管道和第二个程序,即

"directory1/directory2/direcotry3/file.dat | less -I "
Run Code Online (Sandbox Code Playgroud)

我希望将该部分存储在一个变量中,因此可以像这样使用它:

r="directory1/directory2/direcotry3 \| less -I -p "
$ cat path1/path2/$r <searchterm>
Run Code Online (Sandbox Code Playgroud)

相反,我得到

cat: invalid option -- I
Try `cat --help' for more information.
Run Code Online (Sandbox Code Playgroud)

...意味着管道显然没有工作。

bash pipe variable

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

在 bash 或 zsh 中序列化 shell 变量

有没有办法序列化shell变量?假设我有一个变量$VAR,并且我希望能够将它保存到文件或其他内容中,然后稍后再读回以获取相同的值?

有没有一种便携的方式来做到这一点?(我不这么认为)

有没有办法在 bash 或 zsh 中做到这一点?

shell bash zsh variable

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