为什么这个命令行有效:
$ output='Irrelevant'; if [[ $output =~ Something ]]; then echo "I found something in the output." ; fi
Run Code Online (Sandbox Code Playgroud)
这个给我一个奇怪的解析错误?
$ output='Irrelevant'; if [[ $output =~ Something ]]; then echo "I found something in the output!" ; fi
-bash: !": event not found
Run Code Online (Sandbox Code Playgroud)
在只从第一个版本的变化是引号内被呼应了一句带有感叹号结束.为什么Bash在第二个版本中给我错误?
如果重要,这是以下产出bash --version:
GNU bash, version 4.2.24(1)-release (x86_64-pc-linux-gnu)
Run Code Online (Sandbox Code Playgroud) 对我来说它有效:
diretorio=$(echo 'test 123'*)
Run Code Online (Sandbox Code Playgroud)
但是当我在引号中使用变量时却没有用
Var2="test 123"
diretorio=$(echo '$Var2'*)
Run Code Online (Sandbox Code Playgroud)
怎么解决?
我正在研究一个简单的守护进程示例,并注意到以下命令在每次迭代时都会打印相同的时间值.
/bin/bash -c "while true; do echo `date`; sleep 1; done"
Run Code Online (Sandbox Code Playgroud)
输出:
Wed Dec 25 08:00:47 UTC 2013
Wed Dec 25 08:00:47 UTC 2013
Wed Dec 25 08:00:47 UTC 2013
Run Code Online (Sandbox Code Playgroud)
但是,如果我将上面的代码放在脚本中然后运行脚本,它会给出预期的输出.
#!/bin/bash
while true; do
echo `date`
sleep 1
done
Run Code Online (Sandbox Code Playgroud)
输出:
Wed Dec 25 08:02:58 UTC 2013
Wed Dec 25 08:02:59 UTC 2013
Wed Dec 25 08:03:00 UTC 2013
Run Code Online (Sandbox Code Playgroud)
这怎么可能?这是预期的产出吗?
我理解shell变量是当前shell的本地变量,而环境变量(exported 变量)传递给shell分叉的子进程.
当我在双引号内运行Perl单行程序时,我可以从forked perl进程访问(本地)shell变量:
$ FOO=bar
$ perl -we "print qx'echo $FOO'"
bar
Run Code Online (Sandbox Code Playgroud)
这是为什么?
我可以做以下事情:
$ FOO="text"
$ echo $FOO
$ text
Run Code Online (Sandbox Code Playgroud)
但是如何将其包装在bash -c构造中?我尝试过但失败了:
$ FOO="text"
$ bash -c 'echo $FOO'
$ # return nothing
Run Code Online (Sandbox Code Playgroud)
我问这个的原因是因为我需要执行另外需要包装的第三方代码 bash -c
我似乎无法让“git filter-branch”在 bash 中工作:
fix_commit_date() {
git filter-branch --env-filter \
'if [ $GIT_COMMIT = "${1}" ]
then
export GIT_AUTHOR_DATE="${2}"
export GIT_COMMITTER_DATE="${2}"
fi' -f
}
Run Code Online (Sandbox Code Playgroud)
这是我收到的错误消息:
fix_commit_date b62178fd4d40e1e52a7bfef64ff2f269c3aff7f8 "Mon Aug 12 13:03:00 2019"
Rewrite b62178fd4d40e1e52a7bfef64ff2f269c3aff7f8 (8/8) (0 seconds passed, remaining 0 predicted)
WARNING: Ref 'refs/heads/master' is unchanged
Run Code Online (Sandbox Code Playgroud)
如果我只是输入它而不使用 fix_commit_date ,它在 bash 中工作得很好。有什么想法可以让 fix_commit_date bash 命令起作用吗?谢谢。
我想创建一个将打印出当前工作目录子名称的别名.
我有这个:
BASENAME=${PWD##*/}
alias wai="echo $BASENAME"
Run Code Online (Sandbox Code Playgroud)
这将输出目录.bashrc存储的目录子名称.我希望它是当前的工作目录.
对不起,如果这很简单,我是bash的新手.
这是在 OSX El Capitan 上,但也发生在我的 Ubuntu 别名中。
我遇到了一个问题,我创建的别名将工作目录传递给 docker 容器。
这将不起作用(无论我在哪个目录中,始终为 $(pwd) 传递 ~/Users/username ):
alias phpqa="docker run --rm -u $UID -v $(pwd):/app eko3alpha/docker-phpqa"
Run Code Online (Sandbox Code Playgroud)
作品:
alias phpqa='docker run --rm -u $UID -v $(pwd):/app eko3alpha/docker-phpqa'
Run Code Online (Sandbox Code Playgroud)
但是,当传入错误的路径时,我的脚本中开始出现意外错误。所以我做了一个实验。我将这两个别名添加到我的 ~/.bash_profile 中。
alias getpath="echo $(pwd)"
alias getpath2='echo $(pwd)'
Run Code Online (Sandbox Code Playgroud)
我注销然后重新登录。
更改目录:
$ cd /Users/username/correct/path/to/project
Run Code Online (Sandbox Code Playgroud)
执行两个别名:
$ getpath
/Users/username
$ getpath2
/Users/username/correct/path/to/project
Run Code Online (Sandbox Code Playgroud)
带双引号的别名总是返回用户主目录,而带单引号的别名返回当前目录。有人可以解释为什么会这样吗?
此命令将打印a.
echo "line1 a b c" | awk '{ print $2 }'
Run Code Online (Sandbox Code Playgroud)
如果我将单引号更改为双引号,就像这样,它将打印整行.
echo "line1 a b c" | awk "{ print $2 }"
Run Code Online (Sandbox Code Playgroud)
为什么?我知道我应该使用单引号,但如果我使用双引号,为什么打印整行?
我有下面的脚本...
而且我似乎无法让变量起作用
#!/bin/bash
info = 'Help...?'
object='{"attachments": [{"title": "ti1","text": $info }]}'
curl -X POST -H 'Content-type: application/json' --data '$object' https://hooks.slack.com/services/xxxx
exit 0
Run Code Online (Sandbox Code Playgroud)
即使--data '$object'没有$info……也无法工作,因为 Slack API 无法读取我的请求。
我该如何解决?