Réponses:
dc
est un outil très archaïque et un peu plus ancien que bc
. Pour citer la page Wikipedia :
Il est l'un des plus anciens utilitaires Unix, antérieur à l'invention du langage de programmation C; comme les autres utilitaires de ce millésime, il possède un ensemble puissant de fonctionnalités mais une syntaxe extrêmement laconique.
La syntaxe est une notation polonaise inversée, ce qui signifie essentiellement que les arguments (c'est-à-dire les nombres) viennent en premier, suivis de l'opérateur. Un exemple de base de l' dc
utilisation est:
echo '3 4 * p' | dc
Où p
est requis pour imprimer le résultat du calcul. bc
d'autre part utilise la notation infixe plus familière et est donc plus intuitive à utiliser. Voici un exemple d' bc
utilisation:
echo '3 * 4' | bc
bc
est normalisé par POSIX et est probablement le plus portable des deux (au moins sur les systèmes modernes). Si vous faites un travail manuel sur une calculatrice, c'est certainement le choix (sauf si vous êtes un peu masochiste). dc
peut encore avoir ses utilisations, voici un cas où la notation de polissage inversé est utile. Imaginez que vous ayez un programme qui génère un flux de nombres que vous souhaitez totaliser, par exemple:
23
7
90
74
29
Pour ce faire, dc
c'est très simple (au moins avec les implémentations modernes où chaque opérateur peut prendre plus de deux nombres) puisque vous n'avez qu'à ajouter un +p
au flux, par exemple:
{ gen_nums; echo +p } | dc
Mais bc
c'est plus complexe car nous devons non seulement mettre un +
entre chaque numéro et nous assurer que tout est sur la même ligne, mais aussi s'assurer qu'il y a une nouvelle ligne à la fin:
{ gen_nums | sed '$ !s/$/+/' | tr -d '\n'; echo; } | bc
gen_nums
exemple horriblement complexe en utilisant bc
. Il pourrait être simplifié comme gen_nums | paste -sd+ | bc
bc
n'était qu'un outil frontal qui compilait la bc
notation dc
et la canalisait dc
pour obtenir le résultat. Sur FreeBSD, il y a toujours le -c
drapeau bc
avec lequel vous pouvez toujours compiler à la dc
notation . For example
echo '3 * 4' | bc` est égal à echo '3 * 4' | bc -c | dc
. Voir le linux.die.net/man/1/bc et freebsd.org/cgi/man.cgi?query=bc&sektion=1
dc
utilisez-vous? Sur Ubuntu 14.04 et OS X, l' +
opérateur opère toujours sur exactement deux valeurs hors de la pile
bc -c
fait quelque chose de bizarre et différent (et le -c
drapeau n'est pas documenté). Si j'essaye de le canaliser dc
, j'obtiens un tas d'erreurs (et la sortie sans canalisation dc
est très cryptique @iK3:K4:*W@r\n@i
).
Une différence fondamentale entre les deux est celle qui dc
utilise la notation polonaise inverse . Il nécessite des commandes explicites même pour produire une sortie.
Vous pouvez ajouter deux entiers en bc
disant:
bc <<< "2+4"
et il produirait 6
sur une ligne par lui-même. Cependant, dc
vous devez dire:
dc <<< "2 4 +p"
Vous pouvez également faire beaucoup de choses amusantes en utilisant dc
, par exemple, référez-vous à ma réponse ici pour produire
Hello World!
en utilisant dc
.
dc <<< "8 9 * P101P108P108P111P4 8 * P81 6 + P111P114P108P100P33P"
dc
est une calculatrice alors que bc
c'est une langue réelle. Voir leurs pages de manuel.
avant JCdc est une calculatrice de bureau à polissage inversé qui prend en charge l'arithmétique de précision illimitée. Il vous permet également de définir et d'appeler des macros. Normalement, dc lit à partir de l'entrée standard; si des arguments de commande lui sont donnés, ce sont des noms de fichiers, et dc lit et exécute le contenu des fichiers avant de lire à partir de l'entrée standard. Toute sortie normale est vers la sortie standard; toute sortie d'erreur correspond à l'erreur standard.
bc est un langage qui prend en charge des nombres de précision arbitraires avec exécution interactive d'instructions. Il y a quelques similitudes dans la syntaxe avec le langage de programmation C. Une bibliothèque mathématique standard est disponible par option de ligne de commande. Si demandé, la bibliothèque mathématique est définie avant de traiter les fichiers. bc commence par traiter le code de tous les fichiers répertoriés sur la ligne de commande dans l'ordre indiqué. Une fois tous les fichiers traités, bc lit à partir de l'entrée standard. Tout le code est exécuté lors de sa lecture. (Si un fichier contient une commande pour arrêter le processeur, bc ne lira jamais à partir de l'entrée standard.)
Cela dépend vraiment de ce que vous voulez finalement faire mathématiquement. Certaines opérations ne sont pas possibles en utilisant dc
. J'ai utilisé les deux au fil des ans en plus de plusieurs autres outils de calculatrice en ligne de commande. Voir « Solveur d'expression de ligne de commande? » Pour des exemples supplémentaires.
dc
être une calculatrice de notation polonaise inverse et comme je l' ai toujours utilisé les calculatrices de notation inverse polonais HP , je préfère en utilisant dc
pour bc
mais je dirais qu'ils sont tous les deux en tout temps encore utilisé vous devez effectuer un calcul mathématique complexe. Je les utilise souvent pour convertir des nombres n / b base 10 en base 16 et base 2. Mais je les ai utilisés pour additionner des colonnes dans des données tabulaires à partir d'un script AWK.
bc
était une langue dans le sens où elle était dc
conviviale pour les humains - pas qu'elle était plus puissante. Ces jours-ci, les applications partagent des bibliothèques, mais bc
étaient appelées une langue et dc
une calculatrice parce dc
qu'elles faisaient des mathématiques et bc
parlaient des mathématiques dc
. Voici une man
page plus ancienne : Un langage appelé BC
[1] a été développé qui accepte les programmes écrits dans des langages de niveau supérieur et compile la sortie qui est interprétée par DC. Certaines des commandes décrites ci-dessous ont été conçues pour l'interface du compilateur et ne sont pas faciles à manipuler pour un utilisateur humain.
dc
c'est aussi une langue. par exemple codegolf.stackexchange.com/a/47921/11259
À mon humble avis et en aussi peu de mots que possible, GNU dc diffère de GNU bc de 3 façons:
1) Si la bibliothèque mathématique de bc ne vous préoccupe pas, enregistrez autant de frappes que possible (selon les mots de Jan Łukasiewicz: une notation sans parenthèses) lorsque vous faites de l'arithmétique élémentaire, pour vous concentrer davantage sur l'essentiel et éviter les distractions.
2) Dans la ligne de commande de Microsoft Windows 7, GNU dc consomme moins de mémoire (~ 320K) que GNU bc (~ 360K).
3) Beaucoup de contrôle granulaire dans GNU dc que dans GNU bc, par exemple, les commandes de pile et de registre sont absentes de GNU bc.
La version 1.07.1 win32 pour les deux est sur https://embedeo.org/ws/command_line/bc_dc_calculator_windows/
expr
très souvent des calculs simples sur la ligne de commande et dans les scripts.