Другие сказали, что различие получает по сравнению с выполнением, но никто не обрисовал в общих чертах функциональные различия.
Самое большое функциональное различие - это exit
, cd
, и переменные присвоения будут влиять на в настоящее время рабочую оболочку при определении источника ее, но не при выполнении ее. Для демонстрации попробуйте следующее:
$ cat test.sh
#!/bin/bash
mkdir -p test
cd test
pwd
foo=bar
echo script foo: $foo
$ ./test.sh
/Users/kevin/test
script foo: bar
$ echo $foo
$ pwd
/Users/kevin
$ . test.sh
/Users/kevin/test
script foo: bar
$ echo $foo
bar
$ pwd
/Users/kevin/test
$
Теперь попробуйте это:
$ cat test.sh
#!/bin/bash
exit
$ ./test.sh
$ . test.sh
[Process completed]
Как видете, exit
в выполняемом сценарии закончит тот сценарий, но если Вы получаете сценарий с exit
, это выйдет из Вашей текущей оболочки!
xmodmap fix-e-key-for-mac.xmodmap >/dev/null 2>&1
http://mywiki.wooledge.org/BashFAQ/050
Обратите внимание, что в вызове wget, [117542] "$user_agent"[117543] цитируется. Это очень важно.[117211]
Используйте массивы, так что вы можете позволить bash сделать тяжелую работу, и вы можете забыть о кавычках и экранировании:
Пожалуйста, простите меня, но я взял на себя смелость
C:\Ruby\bin> cd /d D:\
D:\>
параметризовать
C:\Ruby\bin> cd D:\
C:\Ruby\bin> D:
D:\>
вашу функцию. Так как значения в PARAMS
устанавливают [117600]только [117601] переменную unset, вы можете очень легко переопределить их значения - это позволяет вам устанавливать вменяемые значения по умолчанию и при этом изменять значения для каждого вызова функции по своему усмотрению. Например, в приведенной выше функции я установил все значения в
echo
и вот результат при запуске как есть:
c---rw---- 1 root lp 6, 0 2011-06-26 22:47 /dev/lp0
Но если я установил
sudo chmod 666 /dev/lp0
"$userstring"
echo "Y helo thar" > /dev/lp0
в
NULL
:
Или:
Или:
Я записал больше о расширении параметра
здесь[117611] и [117612]здесь[117613].[117266].